0

PostgreSQL データベースに 3 つのテーブルがあります。

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
4

2 に答える 2

0

割り当てられmenuていない行を取得する (多くの) 1 つの方法: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;

もっと:

于 2015-04-04T04:53:42.550 に答える
0

私は問題を解決しました...これでした

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

于 2015-04-04T17:28:08.767 に答える