选择具有一对多关系的记录,其中所有许多都在列表中

时间:2014-10-13 02:50:59

标签: sql sql-server tsql join one-to-many

我有一个记录表,与另一个表有一对多的关系。我想返回第一个表中的所有记录,其中第二个表中的所有条目都以逗号分隔的列表中找到。

Client   ClientData                   Client    Project
John                                  John      1
Jane                                  Jane      2
Mary                                  Mary      3
Randy                                 John      4
                                      Mary      5
                                      Randy     6
                                      Jane      7

所以,如果我的列表是(1,2,3,4,5)那么我想为John和Mary返回Client和ClientData。简在列表中有一个条目,但不是全部,所以我不想让她回来。

1 个答案:

答案 0 :(得分:2)

SELECT DISTINCT c.*
FROM ClientData c
INNER JOIN ProjectData pd
    ON c.client_name = pd.client_name AND pd.project_id IN (1,2,3,4,5)
WHERE c.client_name NOT IN (
    SELECT client_name FROM ProjectData WHERE project_id NOT IN (1,2,3,4,5)
)

此外,我希望您为客户使用唯一标识符,而不仅仅是名称。