SQL Server Left 加入两个参数不返回在 B 上找不到 table

SQL Server Left join on two parameters not returning the not found on B table

我有两个 table:"addToCart" 和 "order2":

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

订单 - 购买产品的用户

在两个 table 中我也有产品类别。

加入购物车

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])

据我所知,如果我在 table A 和 table B (on A.id = B.id) 之间进行左连接,我可以从 table A 中提取行在 table B.

中没有匹配项

但是当我 运行 使用 on 子句中的两个参数进行此查询时,ProductCategory3 的 id001 未被 return 编辑。有人可以帮助确定为什么我可以对 return 已添加到购物车的某些 productCategory 但没有订购此 productCategory 的联系人做些什么吗?

嗨!

我目前没有任何服务器,但也许 "having" 可能有这样的东西:

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

P. S. 我不知道您开发的查询的语义,但看起来问题出在那个子句中。