sql - (A AND B) OR NOT B 内连接的 SQL 逻辑
问题描述
我希望按如下方式进行内部连接:
SELECT a.Account
FROM TableA a
JOIN TableB b
ON (a.Account = b.Account AND a.Source IN (SELECT Source FROM TableC))
OR a.Source NOT IN (SELECT Source FROM TableC)
有没有更简单或更有效的方法来实现这一点?
一些数据示例:
表A(帐户,来源):
Account | Source
------------------
111 | florida
222 | florida
333 | georgia
444 | alabama
555 | new York
表B(帐户):
Account
-------
111
222
333
表C(来源):
Source
-------
florida
alabama
解决方案
我认为可以通过使用两个左连接和一个WHERE
子句来重写查询,以避免重复条件a.Source [NOT] IN (SELECT Source FROM TableC)
:
SELECT a.Account
FROM TableA a
LEFT JOIN TableB b ON a.Account = b.Account
LEFT JOIN TableC c ON c.Source = a.Source
WHERE
(c.Source IS NOT NULL AND b.Account IS NOT NULL)
OR c.Source IS NULL
这意味着:TableA
如果两个连接都成功,或者连接不成功,则选择一条记录TableC
。
推荐阅读
- reactjs - React setState 重新渲染旧状态
- apache-kafka - 如何检查 kafka 主题的分区内存使用情况?
- r - 用 R 中因子的相应值替换向量中的数字
- android - 用户如何只能在 Cloud Firestore 中看到自己的数据?
- dependency-injection - 清洁架构 - 将应用服务注入另一个应用服务
- c# - 如何在使用时计算数据流(.Net Stream)的长度
- google-cloud-platform - gcp dag 从执行时间中提取年月日期和小时
- javascript - 如何在节点 js 中计算本地时间
- java - 如何使用 SpringBoot 和 React 从 PostGreSQL 数据库中最有效地加载图像
- java - 使用转换将 200M 记录从源模式迁移到目标模式