假设我们有这样的表“字母”:
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 语句中使用它。 我希望这是有道理的!
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
脱离 Dash 的评论:
SELECT
CASE
WHEN a = 1 OR b = 1 THEN Null
ELSE 0
END
FROM x
因为这会遇到 b = 1、a = 0 并希望返回 NULL 的第二种情况。
记住 如果您使用 GROUP BY 子句并且希望根据某些条件有条件地将值替换为 NULL,则可能需要在 from 子句中使用子查询
如果您希望在内部选择中返回多于一列,则还需要在内部选择中指定这些列...
(SELECT a, NULL 'colname1', NULL 'colname2'
FROM letters
WHERE a=b
AND a=0) x,
您可以使用 x.colname 访问这些列
如果列还可以有除 NULL 之外的值,则只需添加适当的联接并像普通 select 语句一样返回列值。