我有三个表,代表两个实体和一个连接关系。每个实体关系都有一个用于外键约束的人工代理键来代替自然键。
CREATE TABLE Person (
person_id SERIAL PRIMARY KEY,
username VARCHAR NOT NULL UNIQUE
);
CREATE TABLE Group (
group_id SERIAL PRIMARY KEY,
group_name VARCHAR NOT NULL UNIQUE
);
CREATE TABLE GroupMember (
person_id INTEGER REFERENCES Person,
group_id INTEGER REFERENCES Group,
PRIMARY KEY (person_id, group_id)
);
我想在关系中插入多个条目GroupMember
,但使用关联实体的自然键。类似于以下内容:
INSERT INTO GroupMember (person_id,group_id)
SELECT person_id,group_id
FROM Person P, Group G, (
('alice','girls'),
('bob','boys'),
('alice','coolkids'),
('bob','coolkids')
) AS X
WHERE P.username = X.1 AND G.group_name = X.2;
显然上面的语法是无效的,但希望能传达这个想法。有没有办法在 PostgreSQL 中做到这一点?
使用
VALUES
表达式生成临时表并连接到其他表以获取各自的 ID。另外:不要使用保留字
group
作为表名。