Я пытаюсь написать запрос, чтобы объединить данные из трех таблиц:MySQL-запрос с тремя таблицами, с одной ссылкой и с одинаковыми полями. Какой лучший подход?
---------------------------------
| destinations |
---------------------------------
| id | city | status |
---------------------------------
| 1 | Milan | Open |
| 2 | Florence | Open |
| 3 | Venice | Open |
---------------------------------
---------------------------------
| trips |
---------------------------------
| id | from | to | train |
---------------------------------
| 1 | 1 | 2 | 2 |
| 2 | 1 | 2 | 3 |
| 3 | 2 | 1 | 2 |
| 4 | 2 | 3 | 2 |
| 5 | 1 | 3 | 1 |
| 6 | 3 | 1 | 1 |
---------------------------------
---------------------------------
| trains |
---------------------------------
| id | train |
---------------------------------
| 1 | T1 |
| 2 | ChooChoo |
| 3 | IC123 |
---------------------------------
Идея заключается в том, что я хотел бы быть в состоянии показать мой пользователю все экскурсии начинаются или заканчиваются в - говорят - Флоренция.
Что-то вдоль этих линий:
-----------------------------------------------------------------
| Query: all trains going to/from Florence |
-----------------------------------------------------------------
| trips.id | from.id | from (city) | to.id | to. city | train |
-----------------------------------------------------------------
| 1 | 1 | Milan | 2 | Florence | 2 |
| 2 | 1 | Milan | 2 | Florence | 3 |
| 3 | 2 | Florence | 1 | Milan | 2 |
| 4 | 2 | Florence | 3 | Venice | 2 |
-----------------------------------------------------------------
Проблема, с которыми я столкнулся, по существу два: автоматические ссылками таблица назначения (которые я могу легко решить с псевдонимами) и тот факт, что я пытаюсь объединить два набора данных из двух разных выборок (которые я думал о решении с временными таблицами).
Теперь все хорошо, если бы не колонны с одинаковыми именами. Поскольку я хочу сохранить «идентификаторы» в моей временной таблице (для использования со ссылками), я не могу создать временную таблицу с подстановочным знаком (например, SELECT * FROM), но мне нужно было бы указать все столбцы и напишите чудовищный запрос. Он будет работать, но он не будет гибким, и если я добавлю другие столбцы в будущем, это будет ад, обновляющий его!
Может ли любой гуру MySQL, возможно, предложить лучший подход, пожалуйста?
Спасибо и приветствую вас из Австралии.
извините, но я не получаю, Что неправды с «Командировки левой присоединиться к адресаты б на (а .from = b.id) .... " – user5224389
(Хотя я знаю, что вы находите 100 примеров на SO, где я этого не делал ...) Вы всегда должны указывать столбцы в SELECT. Если вы не можете этого сделать, это обычно указывает на недостаток дизайна. – Strawberry
Хорошая точка @Strawberry Возможно, мне стоит рассмотреть дизайн, хотя простота этого примера (и вашего решения) заставляет меня думать, что это уже не так уж плохо. Еще раз спасибо. –