2017-10-05 61 views
1

是否有可能在單個查詢中有兩個連接,其中第二個連接是table_2和table_3之間的連接(沒有鍵引用表格1)?Postgresql在單個查詢中的多個連接其中所有表中都不存在連接的外鍵

table_1 

id | column_a 



table_2 

id | table_1_id | table_3_id | column_b 



table_3 

id | column_c 

現有查詢:

SELECT * FROM table_1 RIGHT OUTER JOIN table_2 WHERE table_1.id id = ? and WHERE column_a = ? 

給我,我從TABLE_1和TABLE_2想要的信息,但TABLE_2的信息將剛纔的table_3_id列。

在相同的查詢,我想加入TABLE_3基於table_2.table_3_id

回答

1

一句話來獲取其數據 - 是的。您可以只需添加更多join條款:

SELECT   * 
FROM    table_1 
RIGHT OUTER JOIN table_2 ON table_1.table_2_id = table_2.id 
RIGHT OUTER JOIN table_3 ON table_3.table_3_id = table_3.id 
WHERE   table_1.id = ? AND column_a = ? 
+1

謝謝!我最初嘗試了這個,但是我的一個表名錯了,並認爲它可能不可能 – Jon

1

where子句轉動right outer joininner join。一般來說,我不是一個正確的連接迷。我認爲左連接的語義更簡單。

所以,你應該寫爲:

SELECT . . . 
FROM table_1 t1 JOIN 
    table_2 t2 
    ON t2.table1.id = t1.id JOIN 
    table_3 t3 
    ON t2.table3.id = t3.id 
WHERE t1.id = ? AND column_a = ?; 

注:

  • where子句中,則不應使用outer join,然後復原。
  • 你應該列出你想要顯式的列。
  • 您應該在多表查詢中限定全部列引用。
  • 表別名使查詢更易於編寫和閱讀。
+0

感謝您的額外信息!會改變 – Jon

相關問題