我正在加入多个表格。使用我的一个连接(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
答案 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