我有一个名为result_seq
的表,其中有3列
STEP_ID
,STEP_PARENT
(父级的ID)和STEP_NAME
。 我必须同时显示父名称和子名称,并且名称位于STEP_NAME
列中。如:
STEP_ID , STEP_PARENT , STEP_NAME;
'{6ef83b76}', '{70207fe2}', 'Check ABC'
对于顶级STEP_ID
,STEP_PARENT
为空。
我目前正在使用select子句中的子查询
select
sq.STEP_ID,
sq.STEP_PARENT,
sq.step_name,
(select sq1.step_name
from result_seq sq1, result_seq sq2
where sq1.step_id=sq2.step_parent) as 'parent_name'
from result_seq sq
但由于某种原因,它说语法错误。我只是想知道其他人如何解决这个问题
非常感谢答案 0 :(得分:0)
您应该使用LEFT JOIN
SELECT
C.STEP_ID as Child_ID
C.STEP_PARENT as Parent_ID,
C.STEP_NAME as Child,
P.STEP_NAME as Parent
FROM result_seq P
LEFT JOIN result_seq C
ON P.STEP_ID = C.STEP_PARENT
当您为子级使用更好的别名C
和为父级使用P
时,请查看更容易阅读。
如果你想修复你当前的查询。
select
C.STEP_ID,
C.STEP_PARENT,
C.step_name,
(select P.step_name
from result_seq P
where P.step_id = C.step_parent) as 'parent_name'
from result_seq C
但是我不会推荐它,因为看起来会有较慢的性能。一如既往,最好的是尝试两种方式,并为自己寻找。
答案 1 :(得分:0)
你必须加入第一个result_sq和第二个,否则你将获得所有'parent_names'。这导致语法错误。
select
sq.STEP_ID,
sq.STEP_PARENT,
sq.step_name,
(select sq2.step_name
from result_seq sq2
where sq2.step_id=sq.step_parent) as 'parent_name'
from result_seq sq
或者你可以简单地使用'LEFT OUTER JOIN'
select
sq.STEP_ID,
sq.STEP_PARENT,
sq.step_name,
sq1.STEP_NAME as 'parent_name'
from result_seq sq
left join result_seq sq1 on sq.STEP_PARENT = sq1.STEP_ID