我需要在一张桌子上进行一次选择,但是如果Product ='football',我需要做几个WHERE,但是如果Product ='something',则需要做其他事情。我不确定是否需要执行从未使用过的IF语句,UNION或CASE。

我想工作但显然没有的示例

SELECT *
FROM
    orders
IF Product = 'Football'{
WHERE
AND RenewalDate < DATE_ADD(CURDATE(), INTERVAL 31 DAY)
AND RenewalDate > DATE_SUB(CURDATE(), INTERVAL 31 DAY)
}ELSE IF Product = 'Something'{
AND RenewalDate < DATE_ADD(CURDATE(), INTERVAL 10 DAY)
AND RenewalDate > DATE_SUB(CURDATE(), INTERVAL 10 DAY)
}
ORDER BY
    RenewalDate


现在我知道这看起来像php,但是它只是大致显示了我想要发生的事情

最佳答案

不需要if。只是布尔逻辑:

SELECT o.*
FROM orders o
WHERE (Product = 'Football' AND
       RenewalDate < DATE_ADD(CURDATE(), INTERVAL 31 DAY)
       RenewalDate > DATE_SUB(CURDATE(), INTERVAL 31 DAY)
      ) OR
      (Product = 'Something' AND
       RenewalDate < DATE_ADD(CURDATE(), INTERVAL 10 DAY) AND
       RenewalDate > DATE_SUB(CURDATE(), INTERVAL 10 DAY)
      )
ORDER BY RenewalDate;

10-04 10:45