如何让select语句在没有返回值的情况下返回null?

问题描述 投票:0回答:5

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

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 语句中使用它。 我希望这是有道理的!

sql oracle
5个回答
5
投票

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

很简单,使用 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

0
投票

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

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

0
投票

脱离 Dash 的评论:

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

因为这会遇到 b = 1、a = 0 并希望返回 NULL 的第二种情况。


0
投票

记住 如果您使用 GROUP BY 子句并且希望根据某些条件有条件地将值替换为 NULL,则可能需要在 from 子句中使用子查询


-3
投票

如果您希望在内部选择中返回多于一列,则还需要在内部选择中指定这些列...

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

您可以使用 x.colname 访问这些列

如果列还可以有除 NULL 之外的值,则只需添加适当的联接并像普通 select 语句一样返回列值。

© www.soinside.com 2019 - 2024. All rights reserved.