[英]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.