SQL Server 2000 加入计数条件
SQL Server 2000 join with count condition
我要加入多个 table。对于我的一个连接(1 到多个),我只想在连接的 table 至少有一行存在特定值的情况下显示结果。
此示例排除了其他联接,因此为简单起见:
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
您可以使用 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);
你试了吗
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
加入两次,一次是将 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
这确实做出了一个未在问题中明确说明的假设。虽然一个联系人可以有多个角色,但前提是一个联系人不会被多次分配相同的角色。
我要加入多个 table。对于我的一个连接(1 到多个),我只想在连接的 table 至少有一行存在特定值的情况下显示结果。
此示例排除了其他联接,因此为简单起见:
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
您可以使用 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);
你试了吗
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
加入两次,一次是将 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
这确实做出了一个未在问题中明确说明的假设。虽然一个联系人可以有多个角色,但前提是一个联系人不会被多次分配相同的角色。