こんにちは、いくつかの複雑なクエリを解決するための助けが必要です。入力したユーザ名(testと言う)をクエリに送信します。私はユーザー名テストの同じ役割を持つ他のユーザーをリストアップする必要がありますまた、それらのユーザー名はユーザー名テストのすべてのgroupidと一致する必要があります。他のユーザーがusernameよりも多くのグループを持っている場合、testは問題ではありませんが、すべてのgroupdidに一致する必要があります。私は次のクエリを試しました。すべてのgroupidが一致すれば、行は返されません。しかし、正確な一致のために行を返すのではなく、すべてのグループIDと一致するユーザー名が必要です。最初のサブクエリですべての行と一致するレコードを取得する方法
select
group_id
from
user_info us ,group_privilege_details gp
where
login_name='test'
and us.user_id = gp.user_id
EXCEPT
select
group_id
from
user_info u ,group_privilege_details g
where login_name !='test'
and role_id in (select role_id
from user_info
where login_name ='test')
and group_id in (select group_id
from user_info us ,group_privilege_details gp
where login_name='test'
and us.user_id = gp.user_id)
and g.user_id = u.user_id
ありがとうございます。私が正しく理解していればと長い説明
5行(またはそれ以上)の入力データと出力行を生成する例を挙げることもできますか? – Johan
私はどちらが理解しやすいか、コードや説明を決定しようとしています... –
これは関係分割の問題だと思います。同様の問題に対する多くの(私はたくさんの)意味の異なるアプローチでこの質問を参照してください:http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation –