我有menu
和action
个表,它们通过一对一表共享链接:
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。
答案 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