MySQL объединяет несколько (более 2) таблиц с условиями - PullRequest
0 голосов
/ 17 июля 2011

Предположим, у меня есть 4 таблицы:

Таблица 1: Task

ID     Task            Schedule
1      Cut Grass         Mon
2      Sweep Floor       Fri
3      Wash Dishes       Fri

Таблица 2: Assigned

ID     TaskID (FK)     PersonID (FK)
1          1                1
2          1                2
3          2                3
4          3                2

Таблица 3: Person

ID     Name
1      Tom
2      Dick
3      Harry

Таблица 4: Mobile

ID     PersonID (FK)     CountryCode     MobileNumber
1          1                 1           555-555-5555
2          2                44           555-555-1234
3          3                81           555-555-5678
4          3                81           555-555-0000

Я пытаюсь отобразить

  1. Задание на определенный день
  2. Имя лица, назначенного на задачу
  3. Телефоны указанного лица

Я думаю, это должно быть что-то вроде следующего, но я не уверен, как настроить условия так, чтобы результаты были ограничены правильно:

SELECT T.ID, T.Task, P.Name, M.MobileNumber
FROM Task AS T
LEFT JOIN Assigned AS A
     ON T.ID = A.TaskID
LEFT JOIN Person AS P
     ON A.PersonID = P.ID
LEFT JOIN Mobile AS M
     ON M.PersonID = P.ID
WHERE T.Schedule = Fri

Моя цель - получить следующую информацию (она будет отображаться по-другому):

Tasks                        Name             MobileNumber
Sweep Floor, Wash Dishes     Dick, Harry      44-555-555-1234, 81-555-555-5678, 81-555-555-0000

Конечно, если JOIN - неправильный способ сделать это, скажите, пожалуйста.

1 Ответ

1 голос
/ 17 июля 2011

Неясно, что вы хотите сделать с дублирующимися данными в этом случае, но вам следует рассмотреть возможность использования внутренних объединений вместо внешних объединений и использования чего-то вроде group_concat () для объединения телефонных номеров.

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