我需要帮助通过连接两个表来正确获取 sql 语句。
我的目标是返回给定产品在特定购买日期之间的购买次数,其中 customer_id
为空。表 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
。这意味着即使“日期”列包含时间部分,代码也能正常工作。
最后,我还介绍了表别名。
关于sql - LEFT JOIN 具有多个 AND 条件的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55753413/