簡體   English   中英

如何在sql查詢(oracle)中獲取孩子的父地址

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

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