【发布时间】:2020-02-20 13:19:41
【问题描述】:
设置很简单,我想从table A 中检索table B 中不存在的所有行。因为可以使用 4 列来标识唯一行,所以我需要有一种方法来编写它可以正常工作的 WHERE 语句。
我的解决方案是连接 4 列并将其用作“一个”列/键来进行外部连接:
select *
from table_A
where filter_condition = 0
and (column1 || column2 || column3 || column4) not in (
select A.column1 || A.column2 || A.column3 || A.column4
from table_A A -- 1618727
inner join table_B B
on A.column1 = B.column1
and A.column2 = B.column2
and A.column3 = B.column3
and A.column4 = B.column4
and filter_condition = 0
)
我的问题是,这是这样做的好方法还是我在做一些根本错误的事情?
需要明确的是,想要的结果只是只取回由于INNER JOIN 与 table_A 和 table_B 而“丢失”的 table_A 的行。
【问题讨论】:
-
filter_condition 列属于哪个表?
-
是否涉及空值?
-
请注意
'AB' || 'C' = 'A' || 'BC',但('AB', 'C') <> ('A', 'BC')。 -
这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com 和标签,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
标签: sql postgresql subquery inner-join