Я пытаюсь понять, как вернуть строку со связанным значением при использовании синтаксиса JOIN, во-первых, следует проверить таблицу links
, чтобы увидеть, является ли строка NULL
, если она не NULL
, используйте что за JOIN
например ON links.role_id = roles.role_id
, если строка NULl
. Если это NULL
, тогда используйте таблицу people
.
Мой синтаксис:
SELECT roles.role_name
FROM
(
people_links links
LEFT OUTER JOIN people people ON links.person_id = people.person_id
LEFT OUTER JOIN roles roles ON links.role_id = roles.role_id OR links.role_id = people.role_id
)
По сути, при объединении и использовании синтаксиса ON
с role_id
он возвращает соответствующее значение из таблицы roles
, которая используется из role_id
, поэтому он должен опираться на таблицу links
first , проверьте, если links.role_id
равно NULL
, затем верните people.role_id
else links.role_id
для JOIN
, чтобы получить role_name
.
Когда я запускаю этот запрос, он сначала использует role_id
из таблицы people
, когда он должен сначала смотреть в таблицу links
.
Я попытался использовать COALESCE
, но он вернет role_id
только тогда, когда он должен вернуть role_name
, например, (псевдокод):
SELECT IF(links.role_id IS NOT NULL) links.role_id ELSE people.role_id ENDIF as join_value
FROM
(
people_links links
LEFT OUTER JOIN people people ON links.person_id = people.person_id
LEFT OUTER JOIN roles roles ON roles.role_id = join_value
)