Sql 左联接不起作用

Sql 左联接不起作用,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我写了下面的查询 SELECT us.Id as Id, us.Name as Name, SUM(CASE WHEN c.isPublish = 0 THEN 1 ELSE 0 END) AS PendingCoupons, SUM(CASE WHEN c.isPublish = 1 and convert(date,c.PublishedDate,101) >= convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS

我写了下面的查询

SELECT 
   us.Id as Id, us.Name as Name,
   SUM(CASE WHEN c.isPublish = 0 THEN 1 ELSE 0 END) AS PendingCoupons,
   SUM(CASE WHEN c.isPublish = 1 and convert(date,c.PublishedDate,101) >=  convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS ApprovedCouponsToday,
   SUM(CASE WHEN c.isPublish = 0 and convert(date,c. CreateDate, 101) = convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS PendingCouponsToday,
   SUM(CASE WHEN c.isPublish = 1 THEN 1 ELSE 0 END) AS ApprovedCoupons,
   SUM(CASE WHEN c.isPublish = 1 and c.Userid = us.Id and convert(date, c.PublishedDate, 101) >= convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS ApprovedByUserToday,
   SUM(CASE WHEN c.isPublish = 1 and c.Userid = us.Id THEN 1 ELSE 0 END) AS ApprovedByUser,
   SUM(CASE WHEN c.ReviewVerify = 1 and convert(date, c.PublishedDate, 101) >= convert(date, GETDATE(), 101) THEN 1 ELSE 0 END) AS ProcessToday,
   COUNT(*) AS Total
FROM 
   Users AS us
LEFT JOIN 
   Coupon c ON Userid = us.Id
GROUP BY 
   us.Name , us.Id
我有两张桌子

运行上述查询后,结果总是这样


此查询中是否有错误,因为它总是返回计数“0”我几乎每个用户都有100张优惠券,但它没有显示。

我认为您可能需要使用
右连接
来获取
优惠券
表中的所有记录。

我认为您可能需要使用
右连接
来获取
优惠券
表中的所有记录。

似乎是因为
对了JOIN
有效并给出正确答案(可能是伪造的用户id),而
左JOIN
根本不会给出任何与优惠券相关的结果,优惠券是在一个不存在的用户上注册的


LEFT JOIN
要求数据存在于表的左侧,而
right JOIN
则要求数据存在于表的右侧。换句话说,数据存在于最右边的表(优惠券)中,与左边(用户)没有任何连接。

似乎因为
右连接
工作并给出正确的答案(可能是伪造的用户id),而
左连接
根本不会给出任何与优惠券相关的结果,优惠券在不存在的用户上注册


LEFT JOIN
要求数据存在于表的左侧,而
right JOIN
则要求数据存在于表的右侧。换句话说,数据存在于最右边的表(优惠券)中,该表与左侧(用户)没有任何连接。

您没有使用正确的联接。 您想获得用户id的优惠券吗? 使用此连接。 从…起 用户和我们一样 左连接 美国的优惠券c.Id=c.Userid 如果这不起作用,则使用: 从…起 用户和我们一样 左外连接
优惠券c ON us.Id=c.Userid

您没有使用正确的连接。 您想获得用户id的优惠券吗? 使用此连接。 从…起 用户和我们一样 左连接 美国的优惠券c.Id=c.Userid 如果这不起作用,则使用: 从…起 用户和我们一样 左外连接
优惠券c ON us.Id=c.Userid

我试过了,它给了我一行结果,我有两个用户。。。。。我还需要每个用户的结果,请注意,结果行显示的是准确的结果,现在的问题是,我需要每个用户的结果。我尝试过,它给了我一行结果,我有2个用户。。。。。我还需要每个用户的结果,请注意,结果行显示的是准确的结果,现在的问题是,我需要每个用户的结果我建立了一个例子,肯定没有得到你的结果;在CASE表达式中不需要
和c.Userid=us.Id
CreateDate
PublishDate
列是什么数据类型?您可以尝试以下查询:
选择us.Id,将(c.Userid)计算为用户在c.Userid=us.Id上按us.Id加入优惠券c的总数并显示结果?@smartboy然后没有优惠券将Userid设置为任何现有用户…?我设置了一个示例,肯定没有得到您的结果;在CASE表达式中不需要
和c.Userid=us.Id
CreateDate
PublishDate
列是什么数据类型?您可以尝试以下查询:
选择us.Id,将(c.Userid)计算为用户在c.Userid=us.Id上按us.Id加入优惠券c的总数并显示结果?@smartboy那么没有优惠券将Userid设置为任何现有用户。。。?