SELECT ALL in a CASE inside a SELECT

SELECT ALL in a CASE inside a SELECT

我正在使用 Pentaho,我想知道是否可以进行这样的查询:

SELECT Something
FROM Somewhere
WHERE (CASE WHEN condition1 = 0 THEN Option IN (Parameter) ELSE
      (Option IN (SELECT Option FROM Somewhere_else)) END);

如果你想要一些精确度,如果我的条件在我的 WHERE 子句中没有得到尊重,我想 select 一切(我想 select 在 where 中的东西与原来的 select). 不要犹豫,问我的方法,当然要回答!

谢谢!

PS: Parameter 是一个 Pentaho 参数,在这里代表一个数组

只需使用常规条件:

SELECT Something
FROM Somewhere
WHERE (condition1 = 0 AND Option IN (Parameter))
   OR (condition1 != 0 AND Option IN (SELECT Option FROM Somewhere_else));

您应该尝试关注,

SELECT Something
FROM Somewhere
WHERE 
1 = case when condition1 = 0 THEN 
       case when Option IN (Parameter) then 1 else 0 end 
    else
       case when Option IN (SELECT Option FROM Somewhere_else) then 1 else 0 end
    end

CASE 与您的陈述无关,与 WHERE 子句完全无关。

使用@X.L.Ant 所建议的简单条件,或者你可以像

那样做一些讨厌的连接
SELECT *
FROM table a
INNER JOIN somewhere ON (option = 0 AND a.id = somewhere.id)
INNER JOIN parameter ON (option != 0 AND a.id = parameter.id)

假设您的参数有点 table。