MySQL - 如何从10个表中获取信息

时间:2013-07-19 16:15:49

标签: mysql

我有一个包含10列的表格。每列都是一些id。例如: TaskID colorID typeID ....

现在我需要获取所有这些信息并且"翻译"真实的"内容。 真实内容在10个不同的表中。表格颜色有颜色ID和颜色名称,表格类型有id和名称等。

除了9个具有内连接的子查询外,我怎样才能以最好的方式做到?

我现在的解决方案是:

select P.*, t3.name
FROM 
(select t1.*, t2.name
from t1 left join t2 on t1.id=t2.id) as P left join on P.id3=t3.i3

依旧......

4 个答案:

答案 0 :(得分:2)

使用连接时不需要子查询:

SELECT
  t1.Name AS t1_Name,
  t2.Name AS t2_Name,
  t3.Name AS t3_Name,
  ...
FROM ReferencingTable AS r
INNER JOIN Table1 AS t1 ON r.ID1 = t1.ID
INNER JOIN Table2 AS t2 ON r.ID2 = t2.ID
INNER JOIN Table3 AS t3 ON r.ID3 = t3.ID
...
;

如果某些引用列可能不包含链接,并且您仍然需要返回这些行,则应该使用外部联接,很可能是留下外部联接:

...
FROM ReferencingTable AS r
LEFT JOIN Table1 AS t1 ON r.ID1 = t1.ID
LEFT JOIN Table2 AS t2 ON r.ID2 = t2.ID
...

答案 1 :(得分:0)

内部联接是最好的方式。 您不能忘记您正在使用基于表之间关系的关系数据库。

答案 2 :(得分:0)

你不需要有任何子查询,你可以使用JOIN来完成所有操作但是如果你的数据集非常大,你可以考虑将你的ID表分成两个不同的表,每个表有5个FK,因为性能开始下降时加入超过7个表。

答案 3 :(得分:0)

如果您可以使用编程解决方案,那么您可以使用Java的JPA来定义实体类,这将有助于您轻松获取所有10个表的数据。

您也可以使用Ruby的ActiveRecord来实现类似的易用性。