質問
私は、次の質問に対する解決策を見つけ出すために私の頭を悩まています:
私は2つのフィールド、USER_IDとCLIENT_IDを持つテーブルがあります。各USER_ID用のN CLIENT_IDsに1があります。
私たちは、そのユーザAが、私はまた、これらのクライアントのすべてにリンクされている他のユーザーを返すクエリを構築するクライアント1,2及び3にリンクされているとしましょう。彼らはより多くのクライアントに連結することができるが、それらは、ユーザAのすべてのクライアントへのリンクを持っている必要があります。
例:ユーザーBは、クライアント1,2,3,4へのリンクがあります。ユーザCは、クライアント1,2へのリンクがあります。ユーザーBがユーザーAのすべてのクライアントへのリンクを持っているため、クエリは、ユーザBを返す必要があります。彼は唯一のユーザーAのクライアントのいくつかのすべてではないにリンクしているため、ユーザCは、返却すべきではありません。
これは、一見シンプルな問題のように思えるが、私は私の人生のために私の制約を満たすクエリを思い付くことができません。私を助けることができる経験豊富なSQLの達人はありますか?
解決
名前とデータ型仮定の数を作る...
DECLARE
@UserId int
,@ClientCount int
DECLARE @Clients as table
(ClientId int not null)
-- All clients for the "target" user
INSERT @Clients
select Clientid
from MyTable
where UserId = @userId
-- Track how many there are
SET @ClientCount = @@rowcount
-- List all users that have those clients
SELECT mt.UserId, count(*) HowMany
from Mytable mt
inner join @Clients cl
on cl.ClientId = mt.Clientid
where UserId <> @UserId
group by mt.UserId
having count(*) = @ClientCount
私はこれに対してをテストするために、テーブルを持っていないが、それは少しデバッグで動作するはずです。
他のヒント
SELECT uc.user_id, u.username, COUNT(*) as client_count
FROM user u
INNER JOIN user_client uc
USING (user_id)
WHERE uc.client_id IN (
SELECT client_id
FROM user_client
WHERE user_id = {ID of user A}
)
GROUP BY uc.user_id, u.username
HAVING client_count = (
SELECT COUNT(*)
FROM user_client
WHERE user_id = {ID of user A}
)
このようなテストされていないと、おそらくMySQLの特定の何かが動作するはずです。
所属していません StackOverflow