[英]Outer Join on two columns with default value if one column is null
我有兩個表-一個是事務表,另一個是查詢表。 這些表連接在兩列上,其中一列始終具有一個值,而另一列則可能沒有。
試一下
transaction table
category | subcategory | marks A | 01 | 10 A | 02 | 20 B | 03 | 30 B | 04 | 40 C | 05 | 50
lookup table
category | subcategory | cut-off A | | 15 A | 01 | 25 B | 03 | 35 B | | 55 C | | 75
我希望通過合並category
和subcategory
列來獲得transaction
表中每個條目旁邊的subcategory
。 對於subcategory
不完全匹配的情況,需要選擇與null
對應的記錄。
所需的輸出格式:
output format
category | subcategory | marks | cut-off A | 01 | 10 | 25 A | 02 | 20 | 15 B | 03 | 30 | 35 B | 04 | 40 | 55 C | 05 | 50 | 75
我一直在嘗試像下面這樣的查詢思路,問題當然是它不能按我想要的方式工作,因為它不能正確處理空值。
select t.category, t.subcategory, t.marks, l.cut-off from transaction t left outer join lookup l on t.category = l.category and t.subcategory = l.subcategory
我是否需要多個查詢(例如,一個union all
not null
分別處理null
和not null
?是否有適用於單個查詢的選項?
您可以這樣做:
SELECT t.category, t.subcategory, t.marks, l.cut-off FROM transaction t left outer join lookup l on t.category = l.category and t.subcategory = ISNULL(l.subcategory, t.subcategory)
使用子查詢(對於Oracle為NVL)
SELECT t.category,
t.subcategory,
t.marks,
NVL(
(SELECT l.cut_OFF from lookup l where l.category = t.category and l.subcategory = t.subcategory),
(SELECT l.cut_OFF from lookup l where l.category = t.category and l.subcategory is null))
FROM transaction t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.