2013-01-16 58 views
2

我在Oracle數據庫的兩個表(fruit_cost和fruit_availability),詳情如下:

fruit_cost看起來像這樣:

fruit_name | fruit_cost
apple | 30
orange | 7
melon | 14

fruit_availability看起來像這樣:

fruit_name | fruit_availability
表是空的

有沒有什麼好的選項來獲得這樣的結果:

fruit_name | fruit_cost | fruit_availability
apple | 30 | null
orange | 7 | null
melon | 14 | null甲骨文從兩個表中選擇數據,如果一個是空返空

回答

7

您可以使用LEFT JOIN加入表格。

A LEFT JOIN將返回fruit_cost表中的所有記錄,無論fruit_availability表中是否存在匹配的記錄。您的查詢將是這樣的:

select fc.fruit_name, 
    fc.fruit_cost, 
    fa.fruit_availability 
from fruit_cost fc 
left join fruit_availability fa 
    on fc.fruit_name = fa.fruit_name 

SQL Fiddle with Demo

結果是:

| FRUIT_NAME | FRUIT_COST | FRUIT_AVAILABILITY | 
------------------------------------------------ 
|  melon |   14 |    (null) | 
|  orange |   7 |    (null) | 
|  apple |   30 |    (null) | 

如果您需要幫助學習聯接語法這裏是一個偉大的visual explanation of joins

+0

這一個也是正確的。謝謝! – constantine

+0

@constantine,而其他答案中的語法僅對oracle有效,Oracle建議您使用'OUTER JOIN'語法而不是連接運算符。這是一個問題解釋 - http://stackoverflow.com/questions/1193654/difference-between-oracles-plus-notation-and-ansi-join-notation – Taryn

+0

感謝您的解釋,他們是非常有幫助的。 – constantine

0
select c.fruit_name, c.fruit_cost, a.fruit_availability 
from fruit_cost c 
    left outer join on fruit_availability a on 
    c.fruit_name = a.fruit_name 
order by c.fruit_name 
+0

select c.fruit_name,c.fruit_cost,a.fruit_availability from fruit_cost c left outer join fruit_availability a on c.fruit_name = a.fruit_name order by c.fruit_name – constantine

2

甲骨文語法:

select * 
from fruit_cost fc, fruit_availability fa 
where fc.fruit_name = fa.fruit_name (+); 

SQL小提琴here

+0

最佳和最短結果4我的解決方案。謝謝! – constantine