заполнить статические значения для пропущенных значений базы данных - PullRequest
0 голосов
/ 28 января 2019

У меня есть запрос, чтобы извлечь некоторые записи из базы данных - используя несколько таблиц, чтобы связать имена агентов с их продажами.Моя проблема в том, что агент phone_id и agent first_name и last_name не всегда находятся в базе данных.Для этих значений я бы хотел указать «неизвестные» для их имени и фамилии.Мой запрос, как он существует сегодня - просто пропускает их, поскольку они не совпадают.

select recordings.ident,users.first_name,users.last_name,recordings.agent_number,recordings.device_id from recordings
  join agent_phones
    on recordings.agent_number=agent_phones.phone_id
      join users
        on agent_phones.agent_id=users.uid

Есть ли способ сделать что-то вроде "если" в запросе?так что «если» номер_ агента не существует в агентах-агентах - я могу просто заполнить first_name и last_name статическим «неизвестно».

1 Ответ

0 голосов
/ 28 января 2019

Вы ищете предложение LEFT JOIN, которое также включает строки, которые не могут быть объединены (нет соответствующей строки во второй / правой таблице).В этом случае значения из второй / правой таблицы будут NULL.

SELECT recordings.ident, users.first_name, users.last_name, recordings.agent_number, recordings.device_id
FROM recordings
  LEFT JOIN agent_phones
    ON recordings.agent_number = agent_phones.phone_id
  LEFT JOIN users
    ON agent_phones.agent_id = users.uid

. Это может быть расширено для возврата указанной строки вместо NULL значений с использованием функции COALESCE:

SELECT
    recordings.ident,
    COALESCE(users.first_name, 'unknown'),
    COALESCE(users.last_name, 'unknown'),
    recordings.agent_number,
    recordings.device_id
FROM ...
...