2012-05-23 48 views
0

因此,我不確定對這些表進行連接的最佳方式是什麼。我想使用JOIN,因爲我認爲它比FROM中的所有三個表都快。所以,如果我有三個表...SQL使用軌道連接表加入

Table1 
--id 
--data 

Table2 
--id 
--data 

Table1_Table2 
--table1_id 
--table2_id 

我該怎麼辦使用連接表這個數據的加入?

回答

2

提到FROM子句中的所有表也是一個隱式連接。不建議使用它,因爲它可能會導致涉及表的笛卡爾積,因爲您會忘記在WHERE子句中添加謂詞。

看看Wikipedia JOIN article以及這個very nice blogpost關於傑夫阿特伍德加入。

我認爲你對錶格之間的INNER JOIN感興趣,儘管存在其他變體。試試這個:

SELECT t1.*, t2.* 
    FROM Table1 t1 
    INNER JOIN Table1_Table2 tt ON t1.id = tt.table1_id 
    INNER JOIN Table2 t2 ON t2.id = tt.table2_id; 

我從選擇列表中跳過了Table1_Table2列,因爲這裏沒有什麼特別的。

0

雖然上述方案的工作,你可能想給軌道路解決方案嘗試

既然你需要,只有參與表的主鍵連接表,可以循環到has_and_belongs_to_many關聯。它和幕後的SQL查詢一樣,並且是一個更好的解決方案。如果您想要在連接表中添加更多列,您還可以查看has_many到關聯(也在鏈接的railscast中進行了解釋)。

+0

我會如果我能。 – Red