我有三个表(users
,students
和staff
)。所有三个表共享三个共同属性(emplid
,first_name
和last_name
)。我希望能够在students
和staff
上建立联盟,如下所示:
SELECT emplid, first_name, last_name
FROM students
UNION
SELECT emplid, first_name, last_name
FROM staff
然后,我希望获取生成的查询,并将任何用户插入users
表中,这些用户被视为“新”(在联合结果中但不在查询表中)。
我如何使用SQL(特别是PostgreSQL)实现这一目标?
INSERT INTO users (...)?
答案 0 :(得分:1)
LEFT JOIN
/ IS NULL
可能最简单:
INSERT INTO users (emplid, first_name, last_name)
SELECT sub.emplid, sub.first_name, sub.last_name
FROM (
SELECT emplid, first_name, last_name
FROM students
UNION
SELECT emplid, first_name, last_name
FROM staff
) sub
LEFT JOIN users u2 USING (emplid, first_name, last_name)
WHERE u2.emplid IS NULL;
您可以在<{em> LEFT JOIN
之前将users
加入同一UPDATE
表的另一个实例。
我希望你这样做是为了清理所有冗余存储? (可能没有用于在多个表中保存所有这些列。)
或者,您可以在<{em> users
之前从UNION
查询的每一段消除UNION
中的现有行。更详细,但在完全索引支持下可能更便宜,因为消除UNION
的重复项会变得更便宜。
相关技术概述: