如果一列为空,则使用默认值对两列进行外连接

时间:2014-10-14 15:42:25

标签: sql join sybase-iq

我有两个表 - 一个是事务表,另一个是查找表。这些表连接在两列上,其中一列总是有一个值,而另一列可能没有。

示例

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

我希望通过加入transactioncategory列来获得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 allnull的{​​{1}}?是否有可用于单个查询的选项?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

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)

答案 1 :(得分:0)

使用子查询(用于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