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

0x6*_*773 7 join sql-server-2012

使用两个LEFT JOINs ie

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
LEFT JOIN Table2 AS t3 ON <condition2>
Run Code Online (Sandbox Code Playgroud)

这和AND在 single 中使用一样LEFT JOIN吗?IE

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
AND <condition2>
Run Code Online (Sandbox Code Playgroud)

两者是相同的还是不同的(一般来说)?

Mar*_*rco 13

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

假设您有Table2以下内容:

| Color | Size |
|-------|------|
| Red   |  S   |
| Blue  |  S   |
| Blue  |  XS  |
Run Code Online (Sandbox Code Playgroud)

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

  • 不仅如此,由于这是两次外连接表,您还将通过第一次查询获得迷你笛卡尔积。我的意思是,“Table1”行需要颜色为蓝色和大小为 S。因此,第一个联接为其提供了两个“Table2”匹配项,从而复制了“Table1”行,第二个联接为每个副本提供了两个匹配项,因此总共有四行。 (4认同)