所以,我不确定为这些表进行连接的最佳方法是什么。我想使用 JOIN,因为我相信它比将所有三个表都放在 FROM 上要快。所以,如果我有三张桌子......
Table1
--id
--data
Table2
--id
--data
Table1_Table2
--table1_id
--table2_id
如何使用连接表对这些数据进行连接?
所以,我不确定为这些表进行连接的最佳方法是什么。我想使用 JOIN,因为我相信它比将所有三个表都放在 FROM 上要快。所以,如果我有三张桌子......
Table1
--id
--data
Table2
--id
--data
Table1_Table2
--table1_id
--table2_id
如何使用连接表对这些数据进行连接?
在子句中提及所有表FROM
也是一种连接,隐式连接。不建议使用它,因为它可能会导致所涉及的表的笛卡尔积,以防您忘记在WHERE
子句中添加谓词。
查看Wikipedia JOIN 文章以及Jeff Atwood 撰写的关于连接的这篇非常不错的博文。
我认为您对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 列,因为那里没有什么特别之处。
虽然上述解决方案有效,但您可能想尝试一下 rails-way 解决方案
由于您需要一个仅包含参与表的主键的连接表,因此您可以循环进入has_and_belongs_to_many关联。它的作用与幕后的 SQL 查询相同,是一种更简洁的解决方案。如果您想向连接表添加更多列,您还可以通过关联(也在链接的 railscasts 中解释)查看has_many。