-2

使用所有表中存在的 id 来链接数据,从 3 个表中获取记录的最有效方法是什么?

  • 第一个表:id 不是主键。许多记录具有相同的 id 值。该表的主键是“primary_id”

  • 第二张表:id是主键

  • 第三张表:id是主键

所以我们有一个从第一个表到“id”上的其他两个表的多对一关系。当然,第二到第三个表在“id”上具有一对一的关系,因为“id”是它们两个的主键。

我想从第一个表中选择 5 条记录(让我们说按第一个表primary_id asc 排序 -而不是跨表共享的id),但我也想要其他两个表中的记录。

我应该得到

table1.primary_id | table1.id | table1.some_data | table2.some_data | table3.some_data
--------------------------------------------------------------------------------------
                1 |        22 |          oranges |     fruit seller |          company
                4 |        22 |      watermelons |     fruit seller |          company
               13 |        22 |          bananas |     fruit seller |          company
               15 |        22 |            pears |     fruit seller |          company
               19 |        22 |            beans |     fruit seller |          company

如您所见,在table2中,id为主键,id=22有some_data=fruit Seller,而在id为主键的table3中,id=22有some_data=company

我应该使用什么来通过表 1 的 primary_id 获取前 5 条记录,并像我演示的那样从其他两个表中获取记录?

加入?子查询?我关心的是性能

4

1 回答 1

0

尝试:

select t1.primary_id, t1.id, t1.some_data, t2.some_data, t3.some_data
from table2 t2
join table3 t3 on t2.id = t3.id
cross join (select * from table1 where id = 22 order by primary_id limit 5) t1
where t2.id = 22

确保table1.id上有索引;如果 id, primary_id 上有索引(按此顺序),则查询可能会执行得更好。

于 2013-05-11T15:19:51.360 回答