如何在mysql的where子句中使用if条件

如何在mysql的where子句中使用if条件,mysql,Mysql,我有一个从两个表中获取记录的查询。我想要where子句中带有and运算符的if条件 这是我的密码: SELECT sfo.customer_id, sfo.increment_id FROM sales_flat_order sfo INNER JOIN marketplace_partnertype mptype ON sfo.customer_id = mptype.partner_id WHERE (mptype.type = 'free' AND sfo.status='compl

我有一个从两个表中获取记录的查询。我想要where子句中带有and运算符的if条件

这是我的密码:

SELECT sfo.customer_id, sfo.increment_id FROM sales_flat_order sfo 
INNER JOIN  marketplace_partnertype mptype ON sfo.customer_id = mptype.partner_id 
WHERE (mptype.type = 'free' AND sfo.status='complete') AND IF @mptype.type=='free' THEN ((DATE( updated_at ) = DATE_SUB( CURDATE( ) , INTERVAL 5 DAY ))ELSE (DATE( updated_at ) = DATE_SUB( CURDATE( ) , INTERVAL 3 DAY );
如果@mptype.type=='free',它会在
附近显示语法错误


如果能提供一些帮助来解决这个问题,这应该是值得注意的。

语法不正确,您可以使用where条件中的case-when条件作为

SELECT sfo.customer_id, sfo.increment_id FROM sales_flat_order sfo 
INNER JOIN  marketplace_partnertype mptype ON sfo.customer_id = mptype.partner_id 
WHERE (mptype.type = 'free' AND sfo.status='complete')
and 
case 
 when @mptype.type = 'free' then  DATE( updated_at ) = DATE_SUB( CURDATE( ) , INTERVAL 5 DAY )
 else DATE( updated_at ) = DATE_SUB( CURDATE( ) , INTERVAL 3 DAY ) 
end 

If条件的语法为:

IF(<cond-expr>, <then-expr>, <else-expr>)

在以下情况下无需使用IF或CASE:

SELECT
  sfo.customer_id,
  sfo.increment_id
FROM
  sales_flat_order sfo INNER JOIN  marketplace_partnertype mptype
  ON sfo.customer_id = mptype.partner_id 
WHERE
  (mptype.type = 'free' AND DATE(updated_at) = DATE_SUB(CURDATE(), INTERVAL 5 DAY)
  OR (mptype.type = 'complete' AND DATE(updated_at) = DATE_SUB(CURDATE(), INTERVAL 3 DAY);
但是,如果您希望在可以这样做的情况下使用用例:

WHERE
  mptype.type IN ('free', 'complete')
  AND DATE(updated_at) = DATE_SUB(CURDATE(), INTERVAL CASE WHEN mptype.type='free' THEN 3 ELSE 5 END DAY)

首先,您要将这些日期值与
if
中的日期值进行比较。反正你不应该在那里用。你到底想完成什么?
WHERE
  mptype.type IN ('free', 'complete')
  AND DATE(updated_at) = DATE_SUB(CURDATE(), INTERVAL CASE WHEN mptype.type='free' THEN 3 ELSE 5 END DAY)