在SQL查询中混合CASE和IN

时间:2015-09-01 13:53:38

标签: mysql

我已经阅读了其他问题,但我并不认为他们恰好是'确切地说'喜欢我的情况。

我想要做的是类似于SELECT ... WHERE some_field_to_compare IN (CASE WHEN something something THEN ('1','2','3') ELSE ('0'))

的查询

根据SELECT ... WHERE some_field_to_compare IN ('1','2','3'),查询可以变成SELECT ... WHERE some_field_to_compare IN ('0')something something。如何才能做到这一点?非常感谢你......

编辑:正如亚历克斯所要求的! :))

SELECT cake FROM cakes WHERE cake_magic_number IN (CASE WHEN cake_frosty = 'no_frosty' THEN ('1','2','3') WHEN cake_frosty = 'is_frosty' THEN ('1','2') WHEN cake_frosty = 'wow... good frosty!' THEN ('2') ... END)

2 个答案:

答案 0 :(得分:1)

您可以使用javax.json

json

答案 1 :(得分:0)

http://sqlfiddle.com/#!9/fa3aa/1

SELECT *
FROM cakes 
WHERE 
  CASE 
    WHEN cake_frosty = 'no_frosty' AND cake_magic_number IN (1,2,3) THEN 1 
    WHEN cake_frosty = 'is_frosty'AND cake_magic_number IN (1,2) THEN 1 
    WHEN cake_frosty = 'wow... good frosty!' AND cake_magic_number = 2 THEN 1
  ELSE 0
  END

或imho更紧凑的变体我更喜欢:

SELECT *
FROM cakes 
WHERE 
  IF(cake_frosty = 'no_frosty' AND cake_magic_number IN (1,2,3),1, 
    IF(cake_frosty = 'is_frosty'AND cake_magic_number IN (1,2),1, 
       IF(cake_frosty = 'wow... good frosty!' AND cake_magic_number = 2,1,
       0)
    )
  )

甚至只是正如戈登林诺夫所说的那样:

http://sqlfiddle.com/#!9/fa3aa/3

SELECT *
FROM cakes 
WHERE 
  (cake_frosty = 'no_frosty' AND cake_magic_number IN (1,2,3))
  OR (cake_frosty = 'is_frosty'AND cake_magic_number IN (1,2))
  OR (cake_frosty = 'wow... good frosty!' AND cake_magic_number = 2);