SQL使用rails中的连接表加入

时间:2012-05-23 19:09:47

标签: sql postgresql join jointable

所以,我不确定为这些表进行连接的最佳方法是什么。我想使用JOIN,因为我认为它比将所有三个表都放在FROM上更快。所以,如果我有三张桌子......

Table1
--id
--data

Table2
--id
--data

Table1_Table2
--table1_id
--table2_id

如何使用连接表对此数据​​进行连接?

2 个答案:

答案 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中说明)。