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
感觉应该有更好的方法来完成此操作,并希望有人可以将我指向正确的方向!
谢谢!
答案 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