我有两张桌子,
SiteTermsAndConditions
和UserAcceptedTermsCondition
。外键SiteTermsAndConditions
(ID)指的是UserAcceptedTermsCondition.TermConditionId
。
SiteTermsAndConditions
--> 存储与网站相关的条款和条件UserAcceptedTermsCondition
--> 仅存储客户在网站上接受的条款和条件架构
我要选择网站的所有条款和条件,还有客户没有接受的条款和条件,请参考这个查询:
select
STC.Id, STC.Name, STC.Description, STC.Url,
USTC.Id as AcceptedID, USTC.CustomerId
from
SiteTermsAndConditions STC
left join
UserAcceptedSiteTermsAndConditions USTC On STC.Id = USTC.TermsAndConditionId
where
STC.SiteId = 0 and USTC.CustomerId = 7.
预期输出: 对于客户尚未接受的条款和条件,
SiteTermsAndConditions
表中 AcceptedID
(UserAcceptedSiteTermsAndConditions
的 ID)为空的所有记录。
如果客户已接受条款和条件,则必须使用客户接受的
UserAcceptedTermsCondition
表的ID检索所有记录。
请帮助我们修改查询以获得预期的输出
你有 LEFT JOIN USTC,但是这个 WHERE 条件:
USTC.CustomerId = 7
将 LEFT JOIN 转换为 INNER JOIN,因为它不允许 USTC
中缺少数据(NULL)
从 WHERE 子句中删除这个
USTC.CustomerId = 7
并将其添加到连接 ON 条件中:
from
SiteTermsAndConditions STC
left join
UserAcceptedSiteTermsAndConditions USTC
On STC.Id = USTC.TermsAndConditionId
and USTC.CustomerId = 7
where
STC.SiteId = 0
在这种情况下,它将作为 LEFT JOIN