繁体   English   中英

左联接两个具有多个AND条件的表

[英]LEFT JOIN two tables with multiple AND conditions

我需要通过连接两个表来正确获取sql语句的帮助。

在此处输入图片说明

我的目标是针对customer_id为null的给定产品返回某些购买日期之间的购买次数。 Purchases的外键是prospect_id对应于Prospect id

在单独的SQL语句中,我将具有以下内容:

SELECT COUNT (id) FROM Purchases 
WHERE (purchasedate BETWEEN '5/1/18' AND '12/31/18')
AND (product = 'Scooter')

SELECT id
from Prospect
where customer_id is null

因此,我提出了这样的查询:

SELECT COUNT (id)
FROM Purchases
LEFT JOIN Prospect 
ON Prospect.id = Purchases.prospect_id
AND (Purchases.purchasedate BETWEEN '5/1/18' AND '12/31/18')
AND Purchases.product = 'Scooter'
AND Prospect.customer_id is null;

但是然后我得到了错误:列引用“ id”是不明确的。

使用count(*)

SELECT COUNT(*)
FROM Purchases pu LEFT JOIN
     Prospect pr
     ON pr.id = pu.prospect_id AND
        pr.customer_id is null
WHERE pu.purchasedate >= '2018-05-01' AND
      pu.purchasedate < '2019-01-01' AND
      pu.product = 'Scooter';

我对查询做了一些更改。

首先, purchase条件位于where子句中,而不是on子句中。 大概,您实际上希望它们成为过滤器。

其次,日期使用正确的格式YYYY-MM-DD。

我还用显式比较替换了between 这意味着即使“日期”列具有时间成分,代码也可以工作。

最后,我还介绍了表别名。

错误的原因是您没有定义要计数的“ id”字段来自哪个表。

SELECT 
COUNT(PURCHASES.ID) AS PURCHASE_COUNT
FROM 
Purchases 
LEFT JOIN Prospect 
ON Prospect.id = Purchases.prospect_id
AND (Purchases.purchasedate BETWEEN '5/1/18' AND '12/31/18')
AND Purchases.product = 'Scooter'
AND Prospect.customer_id is null;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM