当一对一表中不存在所有键时,一对一表加入两个表

时间:2013-02-06 15:20:47

标签: sql oracle

我有menuaction个表,它们通过一对一表共享链接:

menu: id, name
action: id, name
MenAct: menu_id, action_id

并非menu.id中的所有MenAct.menu_id都设置了(换句话说,某些菜单没有相关操作)...

我不能写select,它在{:1}}时给出menu.name, action.name对:

menu.id = MenAct.menu_id AND action.id = MenAct.action_id

menu.name, NULL否则......

这需要嵌套请求或其他SQL技术,但我非常喜欢Oracle SQL。

1 个答案:

答案 0 :(得分:5)

听起来你想要LEFT JOIN而不是INNER JOIN

select m.name, a.name
from menu m
left join menuact ma
    on m.id = ma.menu_id
left join action a
    on ma.action_id = a.id

LEFT JOIN将返回menu表中的所有行,无论其他表中是否有匹配的行。如果它不存在,则null中的值为action

如果您需要帮助学习JOIN语法,这里有一个很棒的视觉explanation of joins