Запросить два ключа из одной таблицы с разными отношениями - PullRequest
0 голосов
/ 28 января 2019

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

User
id_user

Users_Licenses   (one-to-many unidirectional)
user(coach)
license_id

License
id
user_id (user simple) (one-to-one user)

Теперь я должен вернуть имя пользователя (один к одному) или ноль, если его нетно я не уверен, как это сделать, потому что он всегда возвращает мне имя пользователя тренера.Что я пробовал:

SELECT ul.license_id, u.username, cl.created_at
FROM user u
INNER JOIN users_licenses ul ON ul.user_id = u.id
INNER JOIN license l ON l.id = ul.license_id
WHERE ul.user_id = :coachId

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Попробуйте LEFT OUTER JOIN вернуться к USER

SELECT ul.license_id, userLicensee.username as licensee
FROM user u
INNER JOIN users_licenses ul ON ul.user_id = u.id_user
INNER JOIN license l ON l.id = ul.license_id
LEFT OUTER JOIN user userLicensee ON l.user_id = userLicensee.id_user
WHERE ul.coachid = :coachId

Обратите внимание, что я также изменил WHERE ul.user_id = :coachId на ul.coachid = :coachId (вы не упомянули имя столбца внешнего ключа длятренер-пользователь).

0 голосов
/ 28 января 2019
SELECT ul.license_id, u.username, cl.created_at
FROM user u, users_licenses ul, license l
where ul.user_id = u.id 
and  l.id = ul.license_id
and ul.user_id = coachId;

попробуйте изменить оператор выбора на:

0 голосов
/ 28 января 2019

использование LEFT OUTER JOIN

SELECT ul.license_id, u.username, cl.created_at
FROM users_licenses ul
LEFT OUTER JOIN license l ON l.id = ul.license_id
LEFT OUTER JOIN users u ON ul.user_id = u.id
WHERE ul.user_id = :coachId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...