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

gav*_*koa 1 sql oracle

我有menuaction表通过一对一表共享链接:

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

并非全部都menu.idMenAct.menu_id集合中(换句话说,某些菜单没有相关的动作)......

我不能写select,它给出了对menu.name, action.name时:

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

menu.name, NULL否则...

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

Tar*_*ryn 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
Run Code Online (Sandbox Code Playgroud)

A LEFT JOIN将返回menu表中的所有行,无论它是否在其他表中具有匹配的行.如果它不存在那么你将有一个nullaction.

如果您需要帮助学习JOIN语法,这里有一个很好的连接的视觉解释