内部联接和完全外部联接查询

时间:2018-10-15 01:56:42

标签: mysql database

有四个表

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)

我不知道如何使用外部联接查询来获得上面的结果。

任何人都可以提供帮助和建议。

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

1 个答案:

答案 0 :(得分:1)

需要花费我一些时间才能理解您的目标,但我发现您需要服务表中的所有对行,它们的对(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