有四张桌子

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)不出现在表nonServiceChargeAset中。假设这样,我想这样做:

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

关于mysql - 内部联接和完全外部联接查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52808791/

10-13 06:42