首页 > 解决方案 > 内连接和全外连接查询

问题描述

有四张桌子

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)

我无法弄清楚如何使用外连接查询来获得上面的结果。

任何人都可以提供帮助和建议将不胜感激。

很抱歉内容的格式,如果有人可以帮助重新格式化以帮助理解问题,那就太好了。

标签: mysqldatabase

解决方案


理解您的目标需要我花费,但我发现您需要服务表中的所有行,其对(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

推荐阅读