我有一个DB2服务器,我想根据条件选择数据。
如果我在ColumnX,ColumnY或ColumnZ中有值Value
,则应在TB2.Column1
和TB3.Column1
之间进行搜索
我的发言是一堆左外部联接,但看起来像这样:
SELECT
CASE
WHEN (TB1.ColumnX || TB1.ColumnY || TB1.ColumnZ) = 'Value'
THEN Statement1
ELSE ' '
END AS MyColumn
FROM
TB1 LEFT OUTER JOIN TB2 ON TB1.JOINCOL = TB2.JOINCOL
LEFT OUTER JOIN TB3 ON TB2.JOINCOL2 = TB3.JOINCOL
WHERE TB1.Column1 between TB2.Column1 and TB3.Column1
但是它不起作用,语法有错误吗?
答案 0 :(得分:0)
仅使用一个表达式就不可能检查多个相等性。您可以使用以下语法技巧:
CASE WHEN 'Value' IN (TB1.ColumnX, TB1.ColumnY, TB1.ColumnZ)
THEN Statement1 ELSE ' ' END AS MyColumn
替代方法是对每一列重复完全相等检查:
SELECT
CASE
WHEN TB1.ColumnX = 'Value' OR
TB1.ColumnY = 'Value' OR
TB1.ColumnZ = 'Value'
THEN Statement1
ELSE ' '
END AS MyColumn
FROM
TB1 LEFT OUTER JOIN TB2
ON TB1.JOINCOL = TB2.JOINCOL
LEFT OUTER JOIN TB3
ON TB2.JOINCOL2 = TB3.JOINCOL
WHERE
TB1.Column1 BETWEEN TB2.Column1 AND TB3.Column1;
如果需要在CASE
子句中引用WHERE
表达式,则有两种选择。首先,您可以对当前查询进行子查询,并为CASE
表达式分配别名:
SELECT *
FROM
(
SELECT CASE WHEN ... AS exp
FROM TB1 ...
) t
WHERE exp = ...
或者,您可以避免子查询,而只在CASE
子句中重复整个WHERE
表达式。