MySQL IF in WHERE 条件 基于 SELECT 列


MySQL IF in WHERE condition Based On SELECT Column

我有这个简单的(实际上我正在简化真实情况)SQL命令:

SELECT Username, Message
FROM Mail
WHERE DeleteBySender = '0'
LIMIT 1

但出于某种原因,我有特殊条件,那就是:如果 Mail.Username = 'johndoe' 则 WHERE 子句不再DeleteBySender = '0'而是DeleteByReceiver = '0'

简而言之,如何根据 Mail.用户名结果制作动态 WHERE 子句?

可以用单个SQL命令来完成吗?因为如果没有,在我的真实情况下,它会导致PHP脚本更加复杂。

**更新:我真正期望的,用简单的英语:如果 Mail.Username 不是 johndoe,SQL 命令将是这样的:

SELECT Username, Message
FROM Mail
WHERE DeleteBySender = '0'
LIMIT 1

但如果 Mail.Username 是 johndoe,SQL 命令将是这样的:

SELECT Username, Message
FROM Mail
WHERE DeleteByReceiver = '0'
LIMIT 1

SQL 中的一种解决方案,利用 OR 子句来分解逻辑,如下所示:

SELECT Username, Message
FROM Mail
WHERE (Username != 'johndoe' AND DeleteBySender = '0')
OR (Username = 'johndoe' AND DeleteByReceiver = '0')
LIMIT 1

注意:LIMIT 1令人担忧。在不知道数据集的情况下,这可能会返回多个结果。你需要测试。

SELECT 
    Username, 
    Message
FROM Mail
WHERE (IF(Username='johndoe',DeleteByReceiver = 0,DeleteBySender =0))
LIMIT 1
SELECT Username, Message
FROM Mail
WHERE (Username = 'johndoe' AND DeleteByReceiver='0') OR DeleteBySender = '0'
LIMIT 1