[英]How to get parent address for child in sql query (oracle)
給定兩個表 parent 和 child 像這樣:
PARENT
id (pk)
address
CHILD
id (pk)
address
parent (fk)
Ex:
PARENT
id address
1 West street
2 East street
3 South street
CHILD
id address parentid
1 1st street 3
2 2nd street (null)
3 (null) 2
4 4th Street 1
Expected outcome for child id in(1, 3)
childid address
1 1st Street
3 East Street
我正在尋找一個查詢,其中列出了一組預定義的孩子的孩子的 id 和地址(例如 id IN (1, 4, 5, 8, 9))。 如果孩子的地址為空,那么我想顯示該孩子的父母的地址。 如何編寫一個查詢(對於 Oracle db)來給我想要的結果?
你需要一個案例:
select case when c.address is null then p.address else c.address end as address
from child c
join parent p on c.parent = p.id
where c.id in (1, 4, 5, 8, 9);
據我所知,你需要孩子的 id(在一組中),如果他們是空的,你想顯示父親的 id ......試試這個:
select coalesce(a.address,b.address) from children a
inner join parent b on a.parent = b.id where a.id in (1,4,5,8,9)
Coalesce返回列表中的第一個非空表達式。 因此,您將返回子 ID,否則您將返回父 ID(分別來自內部連接交叉)。
內連接跨兩個表並返回與規范匹配的行。
您可以使用相關子查詢和合並:
SELECT id,
COALESCE(
address,
( SELECT p.address FROM parent p WHERE c.parent = p.id )
) AS address
FROM children c
WHERE id IN (1, 4, 5, 8, 9);
或者您可以使用連接:
SELECT c.id,
COALESCE( c.address, p.address ) AS address
FROM children c
LEFT OUTER JOIN parent p
ON ( c.parent = p.id )
WHERE c.id IN (1, 4, 5, 8, 9);
(如果您沒有父級的信息,請使用LEFT OUTER JOIN
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.