使用两个LEFT JOIN还是将AND与单个LEFT JOIN一起使用?


7

使用两个LEFT JOINs即

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
LEFT JOIN Table2 AS t3 ON <condition2>

这与AND单人使用相同LEFT JOIN吗?即

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
AND <condition2>

两者相同还是不同(一般而言)?


这取决于您的要求和开启条件。如果将t1.col1 = t2.col1与Table2和t1.col1.t3.col1放在一起,那将是相同的。

2
第二个查询会更接近第一个就结果而言,如果使用或代替AND,但它仍然是一个不同的查询一般
Andriy M

尝试使用Explain计划来查看差异:)
Arnab Datta

@RajeshRanjan不,即使在那种情况下,它们也不会等效。
ypercubeᵀᴹ

Answers:


13

他们是不同的。在第一个选项中,您Table2将查询2次。一次t2又一次t3。两者都有不同的内容,您必须以某种方式将它们重新组合在一起。对我来说,它更多是一个OR而不是AND。在第二个选项中,您仅获得Table2同时满足两个条件的行。

假设您具有Table2以下内容:

| Color | Size |
|-------|------|
| Red   |  S   |
| Blue  |  S   |
| Blue  |  XS  |

假如你想拥有属于行BlueS。在第一个选项中,您将获得所有行(t2例如,具有all Bluet3all S),而在第二个选项中,您将仅获得第2行。


4
不仅如此,而且由于这是两次将表外部联接,因此您还将在第一个查询中获得迷你笛卡尔乘积。我的意思是,Table1一行需要颜色为蓝色,尺寸为S。因此,第一个联接为它提供了两个Table2匹配项,从而复制了该Table1行,第二个联接为每个副本给出了两个匹配项,因此总共有四行。
Andriy M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.