簡體   English   中英

SQL查詢所有項匹配

[英]SQL query all items match

我試着在postgres下面查詢:

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中有兩個函數時,我只想要所有匹配。 你幫我嗎? 謝謝。

例如。 用戶id = 1在user_func中只有UPDATE_MODEL,它出現在結果中,對我來說是錯誤的。 此外,用戶id = 2出現在結果中,但是正確,因為它具有所有功能('UPDATE_MODEL','UPDATE_USER')。

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');
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');

看看這是否有效。

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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM