我正在开展一个项目,我有一个
表all_names(
team_name TEXT,
member_name TEXT,
member_start INT,
member_end INT);
我的任务是创建一个
表participants(
ID SERIAL PRIMARY KEY,
type TEXT,
name TEXT);
包含所有团队和成员名称作为他们自己的条目。类型可以是“团队”或“成员”。
为了赞美这个参与者表,我试图创建一个交叉引用表,允许成员通过ID引用团队,反之亦然。我的表看起来像这样:
belongs_to(
member_id INT REFERENCES participants(ID),
group_id INT REFERENCES participants(ID),
begin_year INT,
end_year INT,
PRIMARY KEY (member_id, group_id);
我不确定如何正确地进行和填充表格。
我到目前为止的选择查询是:
SELECT DISTINCT ON (member_name, team_name)
id, member_name, team_name, member_begin_year, member_end_year
FROM all_names
INNER JOIN artists ON all_names.member_name = participants.name;
但我不确定如何继续。填充交叉引用表的正确方法是什么?
答案 0 :(得分:2)
可能最简单的解决方案是使用一些语句。包装这是一项事务,以确保您不会遇到并发问题:
BEGIN;
INSERT INTO participants (type, name)
SELECT DISTINCT 'team', team_name
FROM all_names
UNION
SELECT DISTINCT 'member', member_name
FROM all_names;
INSERT INTO belongs_to
SELECT m.id, g.id, a.member_start, a.member_end
FROM all_names a
JOIN participants m ON m.name = a.member_name
JOIN participants g ON g.name = a.team_name;
COMMIT;
属于多个团队的成员会记录他们的所有会员资格。