因此,我不確定對這些表進行連接的最佳方式是什麼。我想使用JOIN,因爲我認爲它比FROM中的所有三個表都快。所以,如果我有三個表...SQL使用軌道連接表加入
Table1
--id
--data
Table2
--id
--data
Table1_Table2
--table1_id
--table2_id
我該怎麼辦使用連接表這個數據的加入?
因此,我不確定對這些表進行連接的最佳方式是什麼。我想使用JOIN,因爲我認爲它比FROM中的所有三個表都快。所以,如果我有三個表...SQL使用軌道連接表加入
Table1
--id
--data
Table2
--id
--data
Table1_Table2
--table1_id
--table2_id
我該怎麼辦使用連接表這個數據的加入?
提到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列,因爲這裏沒有什麼特別的。
雖然上述方案的工作,你可能想給軌道路解決方案嘗試
既然你需要,只有參與表的主鍵連接表,可以循環到has_and_belongs_to_many關聯。它和幕後的SQL查詢一樣,並且是一個更好的解決方案。如果您想要在連接表中添加更多列,您還可以查看has_many到關聯(也在鏈接的railscast中進行了解釋)。
我會如果我能。 – Red