这两个mysql选择查询是否完全相同?

时间:2013-10-03 14:42:23

标签: mysql sql

我有3张桌子。表1和表2共享第1列和第2列。所有3个表共享第2列(ID列),但只有表3包含第3列。我希望表1,2的第1列和第2列具有相同值的所有行,但仅限于table3.Col3(在ID列2上加入)等于某个特定值“X”。

我有两个出现的查询是相同的,并且正在按照我的意愿工作,但我要求专家确保它们可以互换:

SELECT *
from Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col1 and Table1.Col2 = Table2.Col2
WHERE (Select Col3 from Table3 where Table2.Col2 = Table3.Col2) = "X"

SELECT *  
from Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col1 and Table1.Col2 = Table2.Col2 
INNER JOIN Table3 
ON Table1.Col2 = Table3.Col2
WHERE Table3.Col3 = "X"

1 个答案:

答案 0 :(得分:1)

我会说是的,他们是等同的,并尝试提供解释。

第一次查询:

第一个INNER JOIN只会从表1和表2中选择Col1Col2匹配的行。子查询实际上是一个相关的子查询,它将对外部子查询的每一行执行,这意味着每一行都由INNER JOIN过滤。此外,您正在对来自Col3的{​​{1}}内部查询结果的外部查询进行过滤。这可以为您提供所需的数据。

第二次查询:

略有不同。第一个Table3 = 'X'的工作方式与案例1相同。但是,您使用Table3 INNER JOIN此结果集。同样,您只加入INNER JOIN行。并且,从Table1.Col2 = Table3.Col2开始,它会产生由第一种情况下的相关子查询定义的等效中间结果集。最后,您将对Table1.Col2 = Table2.Col2进行过滤,这会再次生成您想要的精确数据集。

希望这是有道理的。如果我的逻辑错误,请纠正我。