【发布时间】:2020-01-04 09:15:59
【问题描述】:
第一个查询:
SELECT
d.id,
d.brand_name,
count(*) AS no_of_time_used
FROM content oc
LEFT JOIN drama d ON d.id = oc.drama_id
LEFT JOIN orders o ON o.id = oc.order_id
AND o.fundraiser_id IS NOT NULL
GROUP BY drama_id
ORDER BY no_of_time_used DESC;
第二次查询:
SELECT
d.id,
d.brand_name,
count(*) AS no_of_time_used
FROM content oc
LEFT JOIN drama d ON d.id = oc.drama_id
LEFT JOIN orders o ON o.id = oc.order_id
WHERE o.fundraiser_id IS NOT NULL
GROUP BY drama_id
ORDER BY no_of_time_used DESC;
这些查询中只有一个区别是AND vs WHERE。在第一个查询中,我在第二个 JOIN 语句之后使用了 AND,而在第二个查询中,我使用 WHERE 代替了 AND。
编辑:两个查询都返回不同的结果。
【问题讨论】:
-
@SushantYelpale 你确定吗?第二个查询将删除
o.fundraiser_id为空的所有行。第一个不会删除行,因为它是左连接。 -
您介意提供两个查询的通用示例输入和单独的输出吗?我很确定通过这样做你会意识到不同之处。它是第二个查询可能返回的行数少于第一个...
-
在第二个查询中,最后一个联接实际上是内部的,而不是左侧的。
-
声明的重复不是这个问题的重复。例如,OP 很清楚这两个版本返回不同的结果。
-
@Shadow 。 . .不,这个问题是关于特定的过滤条件以及它如何影响结果。这与将
JOIN条件放在WHERE子句中无关。