如何在where子句中使用case

Gow*_*wri 6 mysql

我想只获得status = 1条记录.但我的表格中没有状态栏.所以我使用CASE ... WHEN ...那么得出了价值.但是当我尝试在where子句中使用case时,它显示语法错误.

我的查询

SELECT SQL_CALC_FOUND_ROWS *,
    CASE
        WHEN quantity > num_used AND (CURDATE() BETWEEN coupon_start_date AND coupon_end_date) THEN '1'
        ELSE '0'
    END AS STATUS
FROM
    table_coupon_code
WHERE
    (CASE
        WHEN quantity > num_used AND (CURDATE() BETWEEN coupon_start_date AND coupon_end_date) THEN '1'
        ELSE '0'
    END AS STATUS) = '1' AND coupon_status <> '2'
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点 ?

rab*_*dde 16

AS STATUS从where子句中删除

SELECT SQL_CALC_FOUND_ROWS * ,
  CASE WHEN quantity > num_used AND (CURDATE( ) BETWEEN coupon_start_date AND coupon_end_date)
  THEN '1'
  ELSE '0'
  END AS STATUS
FROM table_coupon_code
WHERE 
CASE WHEN quantity > num_used AND (CURDATE( ) BETWEEN coupon_start_date AND coupon_end_date)
  THEN '1'
  ELSE '0'
  END = '1'
AND coupon_status <> '2'
Run Code Online (Sandbox Code Playgroud)

但你CASE真的没必要.只是把你的CASE病情作为独立的WHERE条件,比如

[...]
WHERE quantity > num_used AND
CURDATE( ) BETWEEN coupon_start_date AND coupon_end_date AND
coupon_status <> '2'
Run Code Online (Sandbox Code Playgroud)