簡體   English   中英

SQL在一個表中顯示父子關系

[英]SQL display parent-child relationship in one table

我有一個名為result_seq的表,該表具有3列

  • STEP_IDSTEP_PARENT (父代的ID)和STEP_NAME

我必須同時顯示父母姓名和孩子姓名,並且該名稱在“ STEP_NAME列中。 如:

STEP_ID     , STEP_PARENT , STEP_NAME; 
'{6ef83b76}', '{70207fe2}', 'Check ABC'

對於頂級STEP_IDSTEP_PARENT為null。

我目前在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 

但由於某種原因,它顯示語法錯誤。 我只是想知道其他人如何解決這個問題

非常感謝

您應該使用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 

但是我不會推薦它,因為外觀會降低性能。 一如既往,最好的方法是同時嘗試一下,看看自己的情況。

您必須加入第一個result_sq和第二個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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM