0

プロファイルの組み合わせをリストした表があります

id | p1 | p2
 1 |  1 | 2
 2 |  2 | 3
 3 |  1 | 3

そして、ユーザーをリストし、それにプロファイルを追加するテーブル。

ご覧のとおり、ユーザーは複数のプロファイルを持つことができます

id | user | comb
 1 | John | 1 
 2 | John | 3 
 3 | John | 2 
 4 | Jef  | 1 
 5 | Jef  | 2 

ここで、ユーザーごとに、最初のテーブルと同じ組み合わせを確認したいと思います。例外出力:

 | user | comb
 | John | 1,2 
 | John | 1,3 
 | Jef| 2,3 

SQL Server 2000でこれを行うにはどうすればよいですか(CTEがない:()?

私はこれ以上進むことはできません:

select * from users where comb in (
select p2 from combinations c inner join users u on u.comb = c.p1
)
4

1 に答える 1

0

私の理解が正しければ、プロファイルの違法な組み合わせを持つユーザーを探していることになります。これは、 illegal_combinations テーブルから開始することで実行できます。

SELECT *
FROM dbo.illegal_combinations ic
JOIN dbo.user_profile p1
ON ic.p1 = p1.comb
JOIN dbo.user_profile p2
ON ic.p2 = p2.comb
AND p1.user = p2.user;

これにより、組み合わせごとにすべてのユーザーが得られるため、ユーザーが複数回発生する可能性があります。しかし、それは簡単に修正できます:

SELECT DISTINCT p1.*
FROM dbo.illegal_combinations ic
JOIN dbo.user_profile p1
ON ic.p1 = p1.comb
JOIN dbo.user_profile p2
ON ic.p2 = p2.comb
AND p1.user = p2.user;

代わりにp1.*、特定の列リストを使用する必要があります。他のテーブルのいずれかの列を含めることができますが、再度ユーザーが重複する可能性があります。

于 2013-03-22T19:26:22.097 に答える