首页 > 解决方案 > SQL Server左连接两个参数不返回在B表上找不到

问题描述

我有两个表:“addToCart”和“order2”:

addToCart - 将产品添加到购物车的用户

order - 购买产品的用户

在这两个表中,我也有产品类别。

添加到购物车

UserID   ProductCategory   Date
-----------------------------------
001id    ProductCategory1  02/24/2020 10:00 AM
001id    ProductCategory2  02/24/2020 11:00 AM
001id    ProductCategory2  02/24/2020 11:40 AM
001id    ProductCategory3  02/24/2020 12:40 PM

订单2

UserID   ProductCategory   Date
-----------------------------------
001id    ProductCategory1  02/24/2020 11:00 AM
001id    ProductCategory2  02/24/2020 11:30 AM

我需要在每个 ProductCategory 中获取放弃购物车的用户。为了实现这一点,我查看添加到购物车但未生成订单的用户,或者一个 ProductCategory 的最后一个 addToCart 比同一 ProductCategory 的订单旧。

所以,我每天都运行这个查询:

select 
  added.UserID,
  added.ProductCategory,
  max(added.[Date]) as addedDate
from addTocart added
left join order2 ord
on added.UserID = ord.UserID
  and added.ProductCategory = ord.ProductCategory
group by added.UserID, added.ProductCategory
having max(added.[Date]) > max(ord.[Date])

据我所知,如果我在表 A 和表 B ( on A.id = B.id) 之间进行左连接,我可以从表 A 中获取表 B 中没有匹配项的行。

但是,当我使用 on 子句中的两个参数运行此查询时,不会返回 ProductCategory3 的 id001。有人可以帮助确定原因吗?我可以做些什么来返回已添加到购物车中的一些 productCategory 但没有订购此 productCategory 的联系人?

标签: sql-server-2005

解决方案


你好!

我目前没有任何服务器,但也许“拥有”可能是这样的:

having max(added.[Date]) > max(ord.[Date]) or IsNull(ord.[Date])

PS我不知道您开发的查询的语义,但看起来问题出在该子句中。


推荐阅读