2017-11-01 11 views
1

私はpostgresので怒鳴るクエリを試してみまし一致:SQLクエリは、すべての項目が

select * from user u join 
    user_func uf on u.pk = uf.user_pk 
where uf.functions in ('UPDATE_MODEL', 'UPDATE_USER') 
      and u.perfil in ('ADMIN', 'MANAGER'); 

しかし、この戻りUPDATE_MODELとUPDATE_USERのいずれかの試合は、私だけですべての試合をしたい、ユーザーがuser_funcに2つの機能を持っている場合。私を助けてくれますか?ありがとう。

たとえば、ユーザーID = 1は、user_funcにUPDATE_MODELのみを持ち、結果に表示されますが、それは間違っています。 また、ユーザーID = 2が結果に表示されますが、すべての機能( 'UPDATE_MODEL'、 'UPDATE_USER')を持つため正しいです。

+1

質問を編集し、サンプルデータと希望する結果を提供してください。 –

答えて

1
select * from user u 
join user_func uf on u.pk = uf.user_pk 
join user u2 on u.id = u2.id 
join user_func uf2 on u2.pk = uf2.user_pk 
where uf.functions = 'UPDATE_MODEL' 
AND uf2.functions = 'UPDATE_USER' 
AND u.perfil in ('ADMIN', 'MANAGER'); 
+0

Mridに感謝しましたが、結果が得られませんでした –

+0

@ThiagoNevesさんが働くことができますか、それとも回答を更新する必要がありますか? – mrid

+0

それは大丈夫です、私はあなたの答えを正解とマークしました。 –

1
SELECT * FROM users 
WHERE u IN (SELECT u from user_func 
      WHERE functions IN ('UPDATE_MODEL', 'UPDATE_USER') 
      group by u 
      having (count(*) > 1)) 
AND perfil in ('ADMIN', 'MANAGER'); 

これが動作するかどうかを確認。

1
select * from user u join 
(
    select uf1.* from user_func uf1 
    join user_func uf2 on uf1.user_pk=uf2.user_pk and uf1.functions <> uf2.functions 
    where uf1.functions in('UPDATE_MODEL', 'UPDATE_USER') 
) as T 
on u.pk = T.user_pk 
where and u.perfil in ('ADMIN', 'MANAGER'); 
関連する問題