sql - LEFT JOIN 具有多个 AND 条件的两个表

标签 sql postgresql left-join

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

enter image description here

我的目标是返回给定产品在特定购买日期之间的购买次数,其中 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/

相关文章:

sql - 插入 COALESCE(NULL,default)

postgresql - Icinga 数据库清理

sql - 选择上次日期中按值分组的行之间共享的所有值

JPA 实体图 : which join types?

php - 组合多个 MySQL JOIN 查询

php - MySQL 使用不同的 WHERE 子句进行多次计数并查看结果

sql - 在关系数据库中存储分层数据有哪些选项?

mysql - 将一个表中两列的连接值插入到另一个表的单个列中

php - 条件连接问题,如果一个字段为空,请选择其他值进行连接

sql - 何时选择通过SQL/语义存储解决方案选择Cassandra?