SQL Server 2000加入计数条件

时间:2016-08-08 19:02:12

标签: sql tsql join sql-server-2000

我正在加入多个表格。使用我的一个连接(1到多个),我想仅在连接表至少有一行存在特定值时才显示结果。

这个例子排除了其他连接,所以为了简单起见:

SELECT 
    c.Name, r.RoleID, r.RoleName
FROM 
    Contact c
INNER JOIN
    Role r ON r.ContactID = c.ID

联系人可以有很多角色。我想显示联系人的所有角色,但只获取至少有一个角色具有RoleID = 4的联系人。我已经尝试了一些但迄今为止没有成功。如果重要,这是在SQL Server 2000上。

我已将问题的范围扩展到这个新问题:SQL Server 2000 condition on joined table

3 个答案:

答案 0 :(得分:1)

两次加入,一次限制为ID 4作为过滤器,再次拉入所有角色:

SELECT 
    c.Name, r.RoleID, r.RoleName
FROM 
    Contact c
INNER JOIN  --if a Contact does not match any Roles with ID 4, this join will exclude that contact from the results
    Role rt /*role temp*/ ON rt.ContactID = c.ID AND rt.RoleId = 4        
INNER JOIN
    Role r ON r.ContactID = c.ID

这确实做出了一个未在问题中明确说明的假设。虽然联系人可以有许多角色,但这假定联系人不会多次分配相同的角色。

答案 1 :(得分:0)

您可以使用EXISTS

SELECT 
    c.Name, r.RoleID, r.RoleName
FROM 
    Contact c
INNER JOIN
    Role r ON r.ContactID = c.ID
WHERE EXISTS(SELECT 1 FROM Role 
             WHERE RoleID = 4
             AND ContactID = c.ID);

答案 2 :(得分:0)

你试试吗

SELECT 
    c.Name, r.RoleID, r.RoleName
FROM 
    Contact c
INNER JOIN
    Role r ON r.ContactID = c.ID group by c.Name, r.RoleID, r.RoleName having min(r.RoleID) = 4