Как вернуть строку со значением diffrent, если «где» не встречалось в MySQL - PullRequest
0 голосов
/ 13 февраля 2019

У меня проблема с получением строк, если идентификатор из одной таблицы не совпадает со второй.Если zamowienia.id_telefon имеет значение null или не соответствует, я не получаю всю строку.Вместо этого я хочу получить столбец crm2018.telefon.numer со значением «0» или нулевым значением.Пожалуйста, помогите:)

Я пробовал что-то подобное, но с очевидным синтаксическим ошибкой:

SELECT 
    crm2018.zamowienia.*,
    crm2018.telefon.numer 
FROM
    crm2018.zamowienia 
    JOIN crm2018.telefon 
WHERE
    if (zamowienia.id_telfon != "0")  zamowienia.id_telefon = telefon.id_telefon else crm2018.telefon.numer as "0"

Вот рабочий код, но с пропущенными строками.

SELECT 
    crm2018.zamowienia.*,
    crm2018.telefon.numer 
FROM 
    crm2018.zamowienia 
    JOIN crm2018.telefon 
WHERE 
    zamowienia.id_telefon = telefon.id_telefon

1 Ответ

0 голосов
/ 13 февраля 2019

Просто используйте левое соединение вместо (внутреннего) соединения.

Соответственно, вам нужно переместить условие объединения из предложения WHERE в предложение ON объединения, чтобы избежать фильтрации несопоставленных записей.Обратите внимание, что ваш запрос имеет предложение JOIN без ON: это синтаксическая ошибка во всех диалектах SQL.

Наконец, я бы порекомендовал использовать псевдонимы таблиц в запросе: это облегчает чтениеи поддерживать.

SELECT 
    z.*,
    t.numer 
FROM
    crm2018.zamowienia AS z 
    LEFT JOIN crm2018.telefon AS t
        ON z.id_telefon = t.id_telefon

Когда в crm2018.telefon нет записи для данного crm2018.zamowienia, запись все равно будет отображаться, причем все столбцы из crm2018.telefon показывают значения NULL.

При необходимости вы можете установить значения NULL в 0 с помощью функции COALESCE (), например:

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