Я хочу вернуть запись по условию - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь выполнить простой запрос if else на основе mysql

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 сервера, чтобы найти правильный синтаксис для использования рядом с 'EXISTS (ВЫБЕРИТЕ псевдоним ИЗ контактов WHERE contacts.user_id = 47 AND contacts. c' в строке 1

Может ли кто-нибудь объяснить мне, в чем проблема?

1 Ответ

2 голосов
/ 04 августа 2020

Вы не можете использовать операторы потока управления, такие как 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 одинарные кавычки предназначены для этой работы. И не повредит привыкнуть к этому и создать более переносимый код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...