[英]Postgres insert into a specified column in the table from another column in the same table where a primary key exists
[英]Adding a column of type Array of INT's where each INT is a primary key from another table (POSTGRES / SQL)
给定两个这样的表
CREATE TABLE participants(
id SERIAL PRIMARY KEY,
Name TEXT NOT NULL,
Title TEXT NOT NULL
);
CREATE TABLE meetings (
id SERIAL PRIMARY KEY,
Organizer TEXT NOT NULL,
StartTime DATE NOT NULL,
EndTime DATE NOT NULL,
Participants INT[],
);
我希望“会议”表的参与者列包含一组整数,这些整数都是“参与者”表中的所有主键(特定参与者)。
如何在“会议”表中定义此字段?
老式的方法是创建一个多对多表,并带有一些常识性约束:
CREATE TABLE meetings_participants(
meeting_id int not null,
participant_id int not null,
primary key (meeting_id, participant_id),
constraint fk_meeting_id foreign key(meeting_id) references meetings(id),
constraint fk_participant_id foreign key(participant_id) references participants(id)
)
现在很容易在会议中添加和删除人员,例如插入或删除行或查询有 4 个或更多参与者的会议。
更常见的方法是为会议参与者创建一个联结表。
CREATE TABLE participants (
participant_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
Name TEXT NOT NULL,
Title TEXT NOT NULL
);
CREATE TABLE meetings (
meeting_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
Organizer TEXT NOT NULL,
StartTime DATE NOT NULL,
EndTime DATE NOT NULL
);
CREATE TABLE meeting_participants(
meeting_id INT NOT NULL,
participant_id INT NOT NULL,
PRIMARY KEY (meeting_id, participant_id),
FOREIGN KEY (meeting_id) REFERENCES meetings(meeting_id),
FOREIGN KEY (participant_id) REFERENCES participants(participant_id)
);
然后用于连接 2 个表。
例如:
SELECT m.*, p.*
FROM meeting_participants mp
JOIN meetings m USING(meeting_id)
JOIN participants p USING(participant_id)
WHERE m.Organizer = 'John Doe';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.