MySQL:如果这是真的,那么

MySQL:如果这是真的,那么,mysql,conditional-statements,where,where-clause,Mysql,Conditional Statements,Where,Where Clause,我的问题是: SELECT * FROM ranks WHERE (price = 25.00 AND accumulate = 0) OR (price <= (SELECT SUM(amount) FROM donations WHERE username = 'username' AND amount IN (SELECT price FROM ranks WHERE accumulate = 1))) ORDER BY price DESC LIMIT 1

我的问题是:

SELECT *
FROM ranks
WHERE
    (price = 25.00 AND accumulate = 0)
    OR
    (price <= (SELECT SUM(amount) FROM donations WHERE username = 'username' AND amount IN (SELECT price FROM ranks WHERE accumulate = 1)))
ORDER BY price
DESC LIMIT 1
基本上,如果找到匹配项,我希望返回第一个where子句,否则返回第二个子句。

使用if尝试此查询

SELECT *
FROM ranks
WHERE if(price = 25.00,accumulate = 0, price <= (SELECT
                           SUM(amount)
                         FROM donations
                         WHERE username = 'username'
                             AND amount IN(SELECT
                                     price
                                   FROM ranks
                                   WHERE accumulate = 1)))
ORDER BY price DESC
LIMIT 1
此查询将起作用

SELECT *
FROM ranks
WHERE price = 25.00 AND accumulate = 0

UNION ALL

SELECT *
FROM ranks
WHERE NOT EXISTS(SELECT *
                  FROM ranks
                  WHERE price = 25.00 AND accumulate = 0)
      AND (price <= (SELECT SUM(amount) FROM donations WHERE username = 'username' AND        amount IN (SELECT price FROM ranks WHERE accumulate = 1)))
ORDER BY price
DESC LIMIT 1

它不是那样工作的。它返回满足OR子句中任一条件的任何记录。那么,如何仅通过一次查询就获得所需的结果?…您是否有price=25.00且accumulate=0的记录?否,我得到的结果与原始结果相同。只有价格@BrianGraham很酷。。。但请检查此查询是否执行得更快,因为它使用Union。此查询仅在paypal连接到我的IPN文件时运行,因此速度不是问题。