如何解决连接三个表并从PostgreSQL中的一个表中提取唯一值
我在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。