我正在尝试基于mysql执行简单的if else查询
SELECT IF EXISTS (SELECT nickname FROM contacts WHERE contacts.user_id = 47 AND contacts.contact_id = 69)
BEGIN
SELECT nickname FROM contacts WHERE contacts.user_id = 47 AND contacts.contact_id = 69
END
ELSE
BEGIN
SELECT CONCAT(users.firstname," ",users.lastname) AS nickname FROM users WHERE users.id = 69
END
但这给我一个错误
错误代码:1064
您的SQL语法有误;请查看与您的MySQL服务器版本相对应的手册,以获取正确的语法,以在第1行的“ EXISTS(从联系人中选择昵称,其中WHEREcontacts.user_id = 47 ANDcontacts.c来选择昵称)
有人可以指导我这里有什么问题吗?
答案 0 :(得分:2)
您不能在查询中使用控制流语句,例如IF
。
但是,您可以通过UNION ALL
的两个查询来实现您显然想做的事情,其中一个查询会根据您的条件返回空集。
SELECT nickname
FROM contacts
WHERE contacts.user_id = 47
AND contacts.contact_id = 69
UNION ALL
SELECT concat(users.firstname, ' ', users.lastname) nickname
FROM users
WHERE users.id = 69
AND NOT EXISTS (SELECT *
FROM contacts
WHERE contacts.user_id = 47
AND contacts.contact_id = 69);
也不要对字符串文字使用双引号。是的,MySQL确实接受,但在标准SQL中,单引号用于该工作。习惯并生成更多可移植的代码也无害。