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

标签 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。感谢您的帮助。

最佳答案

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

关于sql - 我需要对 sql 查询进行健全性检查,如果表中存在该值,则返回一个值;如果不存在,则返回默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407680/

相关文章:

mysql - 将逗号分隔的字符串分隔到新表中

sql - 有没有更好的方法来查找表中的条件最后值?

python - 当SQL语句不返回任何行时,停止Python引发错误

mysql - Sybase =* 连接到 mysql 右外连接

php - 输入提交后生成并下载xml文件(php和mysql)-JPK

mysql加载数据infile它包含比输入列更多的数据

mysql - 使用标准计算值

sql查询 - 过滤重复值以创建报告

mysql - 列出员工项目

mysql - SQL转置和groupby