Join

在結果中加入更多記錄

  • October 18, 2016

我有這個查詢:

SELECT table1.foo, table2.bar, table3.abc, table4.xyz
 FROM table1 table1, table2 table2, table3 table3, table4 table4
WHERE table1.id = table2.id 
 AND table1.id2 = table3.id2 
 AND table1.id3 = table4.id3 
 AND (table1.foo BETWEEN 10 AND 30)

我想在結果中獲得額外的行,table1 中的數據在 table2 和 table3 中沒有匹配的記錄,但仍然只有那些與 table4 中的數據匹配的記錄。我怎麼寫這個?

我想我需要兩個左連接並保持第三個正常連接。

表:

TABLE1:
id (references TABLE2),
id2 (references TABLE3),
id3 (references TABLE4),
foo

TABLE2
id,
bar

TABLE3
id,
abc

TABLE4
id,
xyz

您希望查詢看起來像這樣:

SELECT foo.table1, bar.table2, table3.abc, table4.xyz 
 FROM table1 
LEFT OUTER JOIN table2
 ON table1.id2 = table2.id
LEFT OUTER JOIN table3
 ON table1.id3 = table3.id
JOIN table4
 ON table1.id4 = table4.id
WHERE table1.foo BETWEEN 10 AND 30

它是SQL JOIN語法,所以你可能想查看一些教程或課程,比如CodeAcademy中的一個。另一個有助於了解連接的重要資源是 Jeff Atwood對 sql joins 的視覺化解釋

就像 @a_horse_with_no_name 和 @Vladimir_Oselsky 評論的那樣,您應該從舊的 ANSI-89 SQL 語法切換到目前的 ANSI-92,這樣可以使用更靈活的JOIN語法更輕鬆地編寫(和讀取)查詢。

引用自:https://dba.stackexchange.com/questions/152608