消除重复的左联接SQL

时间:2020-04-19 04:13:14

标签: mysql sql

Table1:
UID (PK), Root_ID (FK), Branch_ID (FK), Leaf_ID (FK)

Table2:
ID (PK), Name

我想将表2中的ID加入表1中的所有3列中,以找出其名称。我当前的代码:

SELECT X.Name, Y.Name, Z.Name
FROM Table1 AS XX
LEFT JOIN Table2 AS X ON X.ID = XX.Root_ID
LEFT JOIN Table2 AS Y ON Y.ID = XX.Branch_ID
LEFT JOIN Table2 AS Z ON Z.ID = XX.Leaf_ID

感觉应该有更好的方法来完成此操作,并希望有人可以将我指向正确的方向!

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以将其写为:

SELECT X.Name, 
CASE X.ID 
 WHEN Root_ID THEN XX.Root_Name 
 WHEN Branch_ID THEN Branch_Name 
 WHEN Leaf_ID THEN Leaf_Name 
END AS [Entity_Name]
FROM Table1 AS XX
LEFT JOIN Table2 AS X 
ON (X.ID = XX.Root_ID OR X.ID = XX.Branch_ID OR X.ID = XX.Leaf_D )

答案 1 :(得分:0)

您的查询没有任何问题。如果您希望最快地获得first_rows,则最好使用(在select中进行选择,如下所示)(确定基准)。 (例如,如果这是您希望向用户显示分页表中的记录的网页)。但这将取决于您在表1中获得的记录数。对于几行,我仍然会采用您原来使用的左联接方法。

如果另一方面要对所有行进行处理(例如,一个ETL作业,它必须处理表1中的所有记录),那么左联接方法是最好的。 / p>

需要注意的是您是否在root_id,branch_id,leaf_id设置上设置了fkey约束

will-change