如果没有返回值,如何使select语句返回null?

时间:2015-08-07 13:51:30

标签: sql oracle

假设我们有“字母”这样的表:

a | b  
-----  
0 | 0  
0 | 1  
1 | 0  
1 | 1

以下选择声明:

SELECT val1, val2, x.a. val3
  FROM table1, 
       table2, 
       (SELECT a 
          FROM letters 
         WHERE a=b 
           AND a=0) x, 
       table3
 WHERE table1.val1 = table2.val1
   AND table1.val2 = table3.val3

我需要嵌入的SELECT语句(x)来返回:

0  
NULL  
NULL  
NULL 

而不是当前正在返回的内容

0  

然后我希望能够在大的SELECT语句中使用它。 我希望这是有道理的!

4 个答案:

答案 0 :(得分:4)

有几种方法可以解决这个问题;

琐碎,使用CASE声明;

SELECT
    CASE 
        WHEN a = b AND a = 0 THEN a
        ELSE NULL
    END
FROM x

返回:

0
NULL
NULL
NULL

使用LEFT JOIN

SELECT  X1.a
FROM    x 
LEFT JOIN   (SELECT a, b FROM x WHERE a = b AND a = 0) AS X1 ON x.a = X1.a AND x.b = X1.b

返回:

0
NULL
NULL
NULL

答案 1 :(得分:0)

WHERE子句充当定义返回哪些行的过滤器,但您要求的是返回所有行,并在返回的行上应用函数以定义为每行返回的值。 / p>

SELECT table1.val1
     , table1.val2
     , x.a
     , table3.val3
  FROM table1
  JOIN table2
    on table1.val1 = table2.val1
  JOIN table3
    on table1.val2 = table3.val3
 CROSS JOIN (SELECT CASE WHEN a = b AND a = 0 THEN a END AS a
               FROM letters) x

答案 2 :(得分:0)

脱离Dash的评论:

SELECT
CASE 
    WHEN a = 1 OR b = 1 THEN Null
    ELSE 0
END
FROM x

因为这会捕获你的第二种情况b = 1,a = 0并希望返回NULL。

答案 3 :(得分:-2)

如果您想在内部选择中返回多个列,则还需要在内部选择中指定这些列...

(SELECT a, NULL 'colname1', NULL 'colname2'
          FROM letters 
         WHERE a=b 
           AND a=0) x, 

您可以使用x.colname

访问这些列

如果列也可以具有除NULL之外的值,则只需要添加正确的连接并将列值作为普通的select语句返回。