连接三个表并从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;
,

您可以同时使用EXCEPTUNION运算符来防止重复。

EXCEPT Source

UNION Source

Working Solution

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