CASE检查IN子句中的NULL值

时间:2017-08-23 07:18:52

标签: mysql

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

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)

我需要检查IN子句中的Null值,然后依赖于结果需要激活选择"合作伙伴"表或只是将预定义字符串列表传递给IN子句。 提前谢谢。

1 个答案:

答案 0 :(得分: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
                  )