我想使用JOIN语法来判断如何返回一个包含关联值的行,首先应该检查links
表,看它是否为NULL
,如果它不是NULL
将其用于JOIN
例如如果该行是NULl
,则为ON links.role_id = roles.role_id
。如果它是NULL
,则使用people
表。选择列,如果不是NULL,然后选择其他
我的语法:
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
时,它将返回从从role_id
使用,因此它应该依靠links
表roles
表中的相关值首先,检查links.role_id
是否为NULL
然后返回people.role_id
否则links.role_id
为JOIN
得到role_name
。
当我运行此查询时,它首先使用people
表中的role_id
,此时应首先查看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
)
其实,尽管我的回答如下 - 我现在认为我不明白你想做什么。你能否展示一些样本数据和预期的结果? – ruakh 2012-03-05 14:41:35