问题描述
我在Postgresql 11.0中有以下表格
col1 id value
1 a 11
2 b 23
3 c 31
col1 id value
2 b 23
3 c 34
col1 id value
1 a 11
4 b 45
我想加入以上三个表,以便仅显示表1中不同的值
所需的输出是:
col id value
3 c 31
我尝试了以下查询:
select * from tbl_1 a
left join tbl_2 b
on a.col1 = b.col1 and a.id = b.id
left join tbl_3 c
on a.col1 = c.col1 and a.id = c.id
where b.id is null and c.id is null
我们非常感谢您的帮助
解决方法
您可以使用EXCEPT
(或EXCEPT ALL
,如果可能的话应保留重复项)。
SELECT *
FROM first
EXCEPT
SELECT *
FROM second
EXCEPT
SELECT *
FROM third;
,
您可以同时使用EXCEPT
和UNION
运算符来防止重复。
WITH TAB1 AS (
SELECT 1 AS COL1,'a' AS ID,11 AS VALUE UNION ALL
SELECT 2 AS COL1,'b' AS ID,23 AS VALUE UNION ALL
SELECT 3 AS COL1,'c' AS ID,31 AS VALUE
),TAB2 AS (
SELECT 2 AS COL1,23 AS VALUE UNION ALL
SELECT 3 AS COL1,34 AS VALUE
),TAB3 AS (
SELECT 1 AS COL1,'a' AS ID,11 AS VALUE UNION ALL
SELECT 4 AS COL1,45 AS VALUE
),TAB AS (
SELECT * FROM TAB2
UNION
SELECT * FROM TAB3
)
SELECT * FROM TAB1
EXCEPT
SELECT * FROM TAB