我想根据条件返回记录

时间:2020-08-04 08:46:54

标签: mysql

我正在尝试基于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来选择昵称)

有人可以指导我这里有什么问题吗?

1 个答案:

答案 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中,单引号用于该工作。习惯并生成更多可移植的代码也无害。

相关问题