Как мне написать MySQL запрос, включающий строку с нулевыми данными? - PullRequest
0 голосов
/ 15 марта 2020

Ниже приведено описание сценария, который я пытаюсь решить.

У меня есть две таблицы. Ниже показана одна таблица с именем display.

id(INT) name(VARCHAR) start_date(DATE) end_Date(DATE) person_id(INT)
5       Whales        2019-01-01       2019-05-31     7
19      Universe      2019-02-01       2019-03-31     13
25      Grizzlies     2019-03-01       2019-06-30     7 
46      Homosapiens?  2019-07-01       2019-09-31     13

Другая таблица с именем people показана ниже.

id(INT) name(VARCHAR) background(TEXT)
7       Ron Swanson   Nonconformist
13      Tom Haverford Hustler
71      Andy Dwyer    Goofball

Я ищу написать SQL запрос, который находит все имена всех дисплеев и имена людей, связанных с дисплеями. Если на дисплее нет человека, дисплей не должен быть в результате. Даже если у человека нет дисплея, его имя должно присутствовать в конечном результате. Правильный запрос должен показывать следующие результаты (см. Таблицу ниже).

Ron Swanson   Whales
Tom Haverford Universe
Ron Swanson   Grizzlies
Tom Haverford Homosapiens?
Andy Dwyer             

Я пришел к следующему запросу:

SELECT p.name, d.name from displays d, people p WHERE d.person_id = p.id; 

, который дает правильный результат минус Энди Дуайер. Я озадачен тем, как включить Энди Дуайера, что мне не хватает?

1 Ответ

3 голосов
/ 15 марта 2020

Вам необходимо использовать LEFT JOIN от people до displays:

SELECT p.name, d.name
FROM people p
LEFT JOIN displays d ON d.person_id = p.id

Выход (для ваших данных выборки)

name            name
Ron Swanson     Whales
Tom Haverford   Universe
Ron Swanson     Grizzlies
Tom Haverford   Homosapiens?
Andy Dwyer      (null)

Демонстрация включена SQLFiddle

...