仅使用主键使用SQL EXCEPT

时间:2015-03-26 18:11:35

标签: sql postgresql composite-key sql-except

我的数据库中有2个表(A和B),我需要将它们联合起来。这两个表都有复合键(九列)作为主键,表中有重复的行。

我可以使用' EXCEPT'获取SELECT A结果中存在的行但不是SELECT B的结果,但我还需要检索其他不重复行的列。即。

SELECT ckA1, ckA2, ... ckA9, columnA1, columnA2, ... columnAN
FROM A
EXCEPT
SELECT ckB1, ckB2, ... ckB9, columnB1, columnB2, ... columnBN
FROM B

其中ckA1 = ckB1,ckA2 = ckB2,... ckA9 = ckB9,但是columnA1不一定等于columnB1,columnA2不一定等于columnB2等。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用NOT EXISTS运算符和相关子查询:

SELECT ckA1, ckA2, ... ckA9, columnA1, columnA2, ... columnAN
FROM A
WHERE NOT EXISTS (
  SELECT 1 FROM B
  WHERE ckA1 = ckB1, ckA2 = ckB2, ... ckA9 = ckB9
)