1

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

现在我需要获取所有这些信息并将 ID“翻译”为“真实”内容。真正的内容在 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

4 回答 4

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
...
于 2013-07-19T17:26:10.840 回答
0

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

于 2013-07-19T16:19:04.530 回答
0

您不需要任何子查询,您可以使用 JOIN 来完成所有操作,但是如果您的数据集非常大,您可能会考虑将您的 ID 表分成两个不同的表,每个表有 5 个 FK,因为当 JOIN 超过7张桌子。

于 2013-07-19T16:19:56.050 回答
0

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

您也可以使用 Ruby 的 ActiveRecord 来获得类似的易用性。

于 2013-07-19T16:23:49.920 回答