所以,我不确定为这些表进行连接的最佳方法是什么。我想使用JOIN,因为我认为它比将所有三个表都放在FROM上更快。所以,如果我有三张桌子......
Table1
--id
--data
Table2
--id
--data
Table1_Table2
--table1_id
--table2_id
如何使用连接表对此数据进行连接?
答案 0 :(得分: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列,因为那里没什么特别的。
答案 1 :(得分:0)
虽然上述解决方案有效,但您可能需要尝试使用rails-way解决方案
由于您需要仅包含参与表的主键的连接表,因此您可以循环进入has_and_belongs_to_many关联。它与幕后的SQL查询相同,是一个更简洁的解决方案。如果要在连接表中添加更多列,还可以查看 has_many到关联(也在链接的railscast中说明)。