MYSQL Join - Использование объединения для получения поля через 4 таблицы - PullRequest
0 голосов
/ 31 октября 2018

У меня есть 4 таблицы, и я хочу использовать внутреннее объединение mysql для имени пользователя (таблица 1) и типа fav (таблица 4). Чтобы сделать это, мне нужно использовать user_id, чтобы получить соответствующий fav_id в таблице 2, затем использовать fav_id, чтобы получить type_of_fav_id в таблице 3, и, наконец, использовать type_of_fav_id в таблице 3, чтобы получить type_of_fav в таблице 4. Я буду признателен за любую помощь.

Таблица 1

Users
----------
user_id 
first_name
last_name

Таблица 2

user_favorite
--------
user_fav_id
user_id
fav_id

Таблица 3

favorites
--------
fav_id
type_of_fav_id

Таблица 4

types_of_fav
--------
type_of_fav_id
type_of_fav

1 Ответ

0 голосов
/ 31 октября 2018

Это довольно просто, на самом деле. Просто объедините каждую из четырех таблиц, соединив первичный ключ каждого из них со своим аналогом внешнего ключа в следующей таблице. Затем вы можете ссылаться на поля, которые вы хотите в вашем предложении SELECT.

SELECT u.first_name, u.last_name, tof.type_of_fav
FROM users u
JOIN user_favorite uf ON u.user_id = uf.user_id
JOIN favorites f ON uf.fav_id = f.fav_id
JOIN types_of_fav tof on f.type_of_fav_id = tof.type_of_fav_id

Это хорошая идея, чтобы настроить сокращения имен таблиц, как у меня здесь. Вам не нужно этого делать, но с ним проще и проще работать. Если вы этого не сделаете, вы должны указать полное имя таблицы, чтобы избежать двусмысленности в ссылках на поля: например, JOIN user_favorite on users.user_id = user_favorite.user_id. Это становится довольно многословно.

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

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