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文件时运行,因此速度不是问题。