我需要对sql查询进行健全性检查,如果它存在于表中则返回一个值,如果不存在,则返回默认值

时间:2010-08-04 16:34:19

标签: sql mysql

我要做的是为少数几个用户返回邮箱位置,并为其他所有人捕获所有邮箱位置。在postfix中,您可以使用

形式的查询传递它
SELECT mailbox FROM virtual_mailboxes WHERE email = '%s'

它将用它正在寻找的电子邮件用户替换%s。我有一个表包含一组需要自己的邮箱(root,support,postmaster)的用户,我希望能够创建一个返回已配置邮箱或'all /'的查询。例如,如果用户名是“support”,那么我希望它为用户名“support”提取邮箱列。如果用户名是'anybody',它与表中的行不匹配,我希望它返回'all /'。

Here is the query I came up with.
SELECT
CASE 
  WHEN v2.username IS NOT NULL THEN v2.mailbox
  ELSE 'all/'
END AS mailbox2
FROM virtual_mailboxes v1
     LEFT JOIN virtual_mailboxes v2 ON v2.username = SUBSTRING_INDEX('support@gmail.com', '@', 1)
LIMIT 1

它有效,但我觉得这样做是非常错误的,如果有更好的方法,我很好奇。

另外一件事,postfix只会替换第一次出现的%s。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

SELECT coalesce( 
    (SELECT mailbox FROM virtual_mailboxes WHERE email = '%s'), 
    'all/'
);