Вернуть все wows, mached и unmatched в MySQL Query

У меня есть две таблицы, и я хочу запросить 2 таблицы, чтобы получить отчет.

POSITION
+-------------+---------------+
| position_id | position_name |
+-------------+---------------+
|     1       |     E1P1      |
|     2       |     E1P2      |
|     3       |     E3P3      |
|     4       |     E4P4      |
+-------------+---------------+   

PEOPLE
+------------+-------------+--------------------+
| people_id  | people_name | people_position_id |
+------------+-------------+--------------------+
|     1      |    JOHN     |         2          |
|     2      |    MARK     |         4          |
+------------+-------------+--------------------+

ЗАПРОС

SELECT position_id, position_name, people_name FROM position
RIGHT JOIN people ON people_position_id = position_id

Когда я использую простой запрос, я получаю только совпадающие строки, как получить все?

Я хотел бы получить этот результат

+----+----------+--------+
| ID | POSITION | STATUS |
+----+----------+--------+
| 1  |   E1P1   | Empty  |
| 2  |   E1P2   | JOHN   |
| 3  |   E3P3   | Empty  |
| 4  |   E4P4   | MARK   |
+----+----------+--------+
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы использовал здесь левое соединение:

SELECT
    po.position_id,
    po.position_name,
    COALESCE(pe.people_name, 'EMPTY') AS STATUS
FROM position po
LEFT JOIN people pe
    ON po.position_id = pe.people_position_id;

Кстати, причина, по которой ваша текущая попытка правильного соединения не удалась, заключается в том, что вы разместили таблицу people с правой стороны соединения. Это означает, что записи о несовпадающих позициях будут отброшены. Вот мой ответ выше, переписанный с использованием правильного соединения:

SELECT
    po.position_id,
    po.position_name,
    COALESCE(pe.people_name, 'EMPTY') AS STATUS
FROM people pe
RIGHT JOIN position po
    ON po.position_id = pe.people_position_id;

Обратите внимание, что порядок столов изменился. В большинстве случаев вы увидите людей, использующих левое соединение, а не правое.

Попробуйте добавить индекс к people, например. CREATE INDEX idx ON people (people_position_id, people_name). Уже одно это должно немного ускорить процесс.

Tim Biegeleisen 28.05.2019 04:16

Другие вопросы по теме