我想使用带有多个连接的SQL查询,类似于下面的示例。
SELECT t1.column1, t1.column2, t1.column3
FROM
table1 t1
LEFT JOIN table2 t2 ON (t1.id1 = t2.id)
LEFT JOIN table3 t3 ON (t1.id1 = t3.id)
JOIN table4 t4 ON t1.id2 = t4.id
WHERE
...
这会产生与以下查询不同的结果:
SELECT t1.column1, t1.column2, t1.column3
FROM
table1 t1
LEFT JOIN table2 t2 ON (t1.id1 = t2.id)
LEFT JOIN table3 t3 ON (t2.id = t3.id)
JOIN table4 t4 ON t1.id2 = t4.id
WHERE
...
如果他们都是正确的'第二个比第一个更有效吗?
由于
答案 0 :(得分:3)
查询不同,因此这不是性能问题。区别在于以下几点:
LEFT JOIN table3 t3 ON (t1.id1 = t3.id)
和
LEFT JOIN table3 t3 ON (t2.id1 = t3.id)
首先,t3.id
只需匹配t1.id
。对于第二个,它需要匹配t2.id1
,而t1.id
也必须匹配id
。换句话说,第二个版本要求t1
同时包含t2
和LEFT JOIN
。
这是因为INNER JOIN
。如果使用{{1}},则查询将是等效的。
答案 1 :(得分:1)
第二个效率更高,因为它总会返回相同或更少量的数据。
在第一个查询中,您要求 table1 和 table4 + table2 中的所有记录(如果它们存在于 table2 中) table1 + table3 中的记录(如果它们存在于 table1 中。
在第二个查询中,您要求 table1 和 table4 + table2 中的所有记录(如果它们存在于 table2 中) table1 +来自 table3 的记录,如果它们存在同时存在于 table1 和 table2