簡體   English   中英

如果一列為空,則使用默認值在兩列上進行外部聯接

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

我希望通過合並categorysubcategory列來獲得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分別處理nullnot 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.

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