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

如果我理解正确,您正在寻找具有非法组合配置文件的用户。您可以通过从非法组合表开始来做到这一点:

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 回答