簡體   English   中英

查詢用相應字段的值替換一個字段

[英]Query for replacing one field with the value of corresponding field

我有一張叫emp的表:

╔════╦══════╦═══════════╗
║ id ║ name ║ fathersid ║
╠════╬══════╬═══════════╣
║  1 ║  a   ║    2      ║
║  2 ║  s   ║   null    ║
║  3 ║  d   ║    1      ║
║  4 ║  f   ║    3      ║
╚════╩══════╩═══════════╝

我要打印與其父親姓名相對應的姓名。

我寫了以下查詢:

SELECT name,
    (SELECT name FROM emp WHERE father_id = id)
FROM emp

這個對嗎?

如果沒有,那么正確的答案是什么?

我更喜歡使用自聯接解決此類問題:

SELECT e1.name AS name, COALESCE(e2.name, 'Not Available') AS fatherName
FROM emp e1 LEFT JOIN emp e2
    ON e1.fathersid = e2.id

幾乎是正確的,您需要為表加上別名,以便讀者知道您正在將內部查詢與外部查詢進行比較:

SELECT t.NAME,
       (SELECT s.name FROM emp s where s.id = t.father_id) as Father_name
FROM emp t

您可以通過聯接執行此操作:

SELECT t.name,s.name as Father_Name
FROM emp t
LEFT OUTER JOIN emp s
 ON(t.father_id = s.id)

在Oracle中,您可以使用分層查詢(只需要進行一次表掃描-與使用需要多次表掃描的聯接或相關子查詢相比):

SELECT name,
       PRIOR name AS fathers_name
FROM   emp
START WITH       fathersid = NULL
CONNECT BY PRIOR empno = fathersid;

暫無
暫無

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

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