首页 > 解决方案 > where子句和join的区别

问题描述

我对 SQL 很陌生,目前是我一生中第一次使用 joins。我现在想弄清楚的是试图找出查询之间的区别。

查询一:

SELECT name
FROM actor
JOIN casting ON id = actorid 
where (SELECT COUNT(ord) FROM casting join actor on actorid = actor.id AND ord=1) >= 30
GROUP BY name

查询 2:

SELECT name
FROM actor
JOIN casting ON id = actorid 
AND (SELECT COUNT(ord) FROM casting WHERE actorid = actor.id AND ord=1)>=30)
GROUP BY name

所以我认为这样做

FROM casting join actor on actorid = actor.id 

在子查询中是一样的

FROM casting WHERE actorid = actor.id.

但显然不是。谁能帮我解释一下为什么?

编辑:如果有人想知道:查询基于来自http://sqlzoo.net/wiki/More_JOIN_operations的问题 13

标签: sql

解决方案


在第二个查询中,您的嵌套查询actor.id从其根查询中获取并仅计算结果。在第一个查询中,您的嵌套查询会计算所有参与者的结果,而不仅仅是指定的参与者。


推荐阅读