2017-08-23 68 views
2

我可以在IN语句中使用CASE吗?我使用的是mysql服务器,下面是查询。CASE检查IN子句中的NULL值

SELECT Id from Tenant 
where TenantId IN (
        CASE WHEN 'someVariable' is NULL 
        THEN (select customer_id from Partners where partner_id = 'abc') 
        ELSE ('xyz1','xyz2','xyz3') 
        END 
       ) 

这将引发错误: Error Code: 1241. Operand should contain 1 column(s)

我需要检查:在第Null值,然后取决于结果需要或者火选择的“合作伙伴”表或只是通过一个列表预定义的字符串转换为IN子句。 在此先感谢。

+0

您可以创建SQL演示? http://sqlfiddle.com/ –

回答

0

你可以试试:

SELECT Id from Tenant 
WHERE TenantId IN (select customer_id from Partners where partner_id = 'abc') 
      AND somevariable IS NULL 
     OR TenantId IN ('xyz1','xyz2','xyz3') AND somevariable IS NOT NULL 

或作为替代

SELECT Id from Tenant 
where TenantId IN (
        CASE WHEN 'someVariable' is NULL 
        THEN (select customer_id from Partners where partner_id = 'abc') 
        ELSE (select 'xyz1' AS id UNION ALL select 'xyz2' UNION ALL Select 'xyz3') 
        END 
       )