需要帮助修改我们的 SQL 查询以获得预期输出

问题描述 投票:0回答:1

我有两张桌子,

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检索所有记录。

请帮助我们修改查询以获得预期的输出

sql left-join cross-join
1个回答
0
投票

你有 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

© www.soinside.com 2019 - 2024. All rights reserved.