Postgresql postgres查找匹配和不匹配的记录
我有两张桌子 离线Postgresql postgres查找匹配和不匹配的记录,postgresql,Postgresql,我有两张桌子 离线 cen | subcen ------------ 01 | 002 ------------ 02 | 001 ------------ 02 | 003 ------------ 03 | 001 ------------ 03 | 009 ------------ 在线 cen | subcen ------------ 01 | 002 ------------ 02 | 001 ------------ 02 | 004 ------
cen | subcen
------------
01 | 002
------------
02 | 001
------------
02 | 003
------------
03 | 001
------------
03 | 009
------------
在线
cen | subcen
------------
01 | 002
------------
02 | 001
------------
02 | 004
------------
03 | 001
------------
03 | 008
------------
04 | 079
------------
05 | 006
------------
我有两个表脱机\u tbl
和联机\u tbl
。我想将离线\u tbl
cen
和subcen
与在线\u tbl
cen
和subcen
进行匹配
出现在脱机\u tbl
或联机\u tbl
中,但不同时出现在两个表中的记录
我的预期产出
cen | subcen
------------
02 | 003
------------
02 | 004
------------
03 | 008
------------
03 | 009
------------
04 | 079
------------
05 | 006
------------
使用完全联接:
select
a.cen as offline_cen,
a.subcen as offline_subcen,
b.cen as online_cen,
b.subcen as online_subcen
from offline_tbl a
full join online_tbl b
on a.cen = b.cen and a.subcen = b.subcen
offline_cen | offline_subcen | online_cen | online_subcen
-------------+----------------+------------+---------------
01 | 002 | 01 | 002
02 | 001 | 02 | 001
02 | 003 | |
| | 02 | 004
03 | 001 | 03 | 001
| | 03 | 008
03 | 009 | |
| | 04 | 079
| | 05 | 006
(9 rows)
如果希望仅获取其中一个表中的值:
select
coalesce(a.cen, b.cen) as cen,
coalesce(a.subcen, b.subcen) as subcen
from offline_tbl a
full join online_tbl b
on a.cen = b.cen and a.subcen = b.subcen
where a.cen is null or b.cen is null
cen | subcen
-----+--------
02 | 003
02 | 004
03 | 008
03 | 009
04 | 079
05 | 006
(6 rows)