假设我们有“字母”这样的表:
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语句中使用它。 我希望这是有道理的!
答案 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语句返回。