Запросить несколько таблиц в PostgreSQL (LEFT или RIGHT и другие)

У меня есть 3 таблицы в моей базе данных PostgreSQL:

menu(id_menu,parent_id,name_uri,uri)
type_role(id_role,name_role)
menutyperole(id_menu,id_role)

В моей таблице type_role у меня есть следующие данные (администратор и техник), в таблице menu существует много многоуровневых ссылок для доступа к другим сторонам, а таблица menutyperole является связью с другими таблицами. Мне нужен запрос для извлечения данных menu, где не назначен техник (таблица type_role). Я не знаю, нужно ли мне какое-то условие или что-то еще?

SELECT * 
FROM menutyperole 
     INNER JOIN type_role ON menutyperole.id_role = type_role.id_role 
     RIGHT JOIN menu ON  menu.id_menu = menutyperole.id_menu 
WHERE menu.id_parent != 0

person user3622259    schedule 04.04.2015    source источник
comment
Я прошу вас предоставить образцы данных для каждой таблицы и ожидаемый результат в вопросе   -  person Vivek S.    schedule 04.04.2015


Ответы (2)


Один способ (из многих) получить строки из menu, которым не назначено type_role:

SELECT m.* 
FROM   menu m
LEFT   JOIN menutyperole mr USING (id_menu)
WHERE  m.id_parent <> 0
AND    mr.id_menu IS NULL;

Более:

person Erwin Brandstetter    schedule 04.04.2015

я решил проблему... было ли это

SELECT * FROM menu INNER JOIN type_role ON type_role.id_role NOT IN(SELECT menutyperole.id_menu FROM menutyperole) LEFT JOIN menutyperole ON menu.id_menu = menutyperole.id_menu WHERE menu.id_parent != 0 AND menutyperole.id_menu IS NULL OR menutyperole.id_role != 1

person user3622259    schedule 04.04.2015