mysql - 内连接和全外连接查询
问题描述
有四张桌子
Service(Id, AssetId,PlanId)
Plan(Id)
Asset(Id)
NonServiceChargeAsset (ServiceId,AssetId)
Service Table
Id AssetId PlanId
A a 1
A b 1
A c 1
A d 1
B a 2
B b 2
B c 2
B d 2
C e 3
D f 3
Asset Table
Id
a
b
c
d
e
f
Plan Table
Id
1
2
3
NonServiceChargeAsset Table
ServiceId AssetId
A a
A b
B c
B d
Output
ServiceId AssetId PlanId
A c 1
A d 1
B a 2
B b 2
C e 3
D f 3
select
s.*
from
service s
full outer join
nonservicechargeAsset ns on s.id = ns.serviceid
where
s.assetid not in (select ns.assetid from nonservicechargeasset ns)
我无法弄清楚如何使用外连接查询来获得上面的结果。
任何人都可以提供帮助和建议将不胜感激。
很抱歉内容的格式,如果有人可以帮助重新格式化以帮助理解问题,那就太好了。
解决方案
理解您的目标需要我花费,但我发现您需要服务表中的所有行,其对(Id, AssetId)未出现在表NonServiceChargeAsset中。假设,我会这样做:
SELECT
s.*
FROM
Service AS s
LEFT JOIN
NonServiceChargeAsset AS ns ON ns.ServiceId = s.Id AND ns.AssetId = s.AssetId
WHERE
ns.AssetId IS NULL AND ns.ServiceId IS NULL
推荐阅读
- docker - 如何在从busybox:1.31.1-glibc 构建的docker 映像中使用apk
- cluster-computing - 尝试配置简单的 ActiveMQ Artemis 集群时出错
- python - 如何将连续行填充到熊猫数据框?
- javascript - 如何访问返回的 html?
- api - 使用 API 蓝图和 Apiary 记录 POST 请求
- javascript - 仅使用不带正则表达式的 JavaScript 允许数字和连字符
- mtp - 在 Windows 上使用 WebUSB 从 Android 设备读取文件
- amazon-web-services - 在 AWS Beanstalk 上部署访问 AWS RDS 的 Dash (python/plotly) 应用程序
- python - Python use variables inside regex
- shell - 提取 xml 标签及其值