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

Cra*_*tes 5 sql oracle

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

a | b  
-----  
0 | 0  
0 | 1  
1 | 0  
1 | 1
Run Code Online (Sandbox Code Playgroud)

以及以下选择语句:

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
Run Code Online (Sandbox Code Playgroud)

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

0  
NULL  
NULL  
NULL 
Run Code Online (Sandbox Code Playgroud)

而不是当前返回的是

0  
Run Code Online (Sandbox Code Playgroud)

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

das*_*ash 5

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

微不足道,使用CASE语句;

SELECT
    CASE 
        WHEN a = b AND a = 0 THEN a
        ELSE NULL
    END
FROM x
Run Code Online (Sandbox Code Playgroud)

返回:

0
NULL
NULL
NULL
Run Code Online (Sandbox Code Playgroud)

使用左连接:

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
Run Code Online (Sandbox Code Playgroud)

返回:

0
NULL
NULL
NULL
Run Code Online (Sandbox Code Playgroud)


aar*_*bor -3

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

(SELECT a, NULL 'colname1', NULL 'colname2'
          FROM letters 
         WHERE a=b 
           AND a=0) x, 
Run Code Online (Sandbox Code Playgroud)

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

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