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

Sql 选择具有一对多关系的记录,其中多个记录都在列表中,sql,sql-server,tsql,join,one-to-many,Sql,Sql Server,Tsql,Join,One To Many,我有一个与另一个表具有一对多关系的记录表。我想返回第一个表中的所有记录,其中第二个表中的所有条目都位于逗号分隔的列表中 Client ClientData Client Project John John 1 Jane Jane 2 Mary

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

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的客户机和ClientData。简在名单上有一个条目,但不是全部,所以我不想让她回来

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)
)

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

John只有1,4,Mary只有3,5,为什么需要返回它们,因为它们都不匹配您的列表采用什么形式?这是一张单独的桌子吗?在客户机项目表中,客户机和项目是否连接在一起形成一个唯一键?该列表当前是一个逗号分隔的列表,我从excel电子表格中复制了该列表。除非有更简单的方法加入电子表格。我无法使用电子表格在数据库中创建要加入的新表。John的两个项目都在列表中。玛丽的两个项目都在名单上。所以,他们应该被退回。Jane的一个项目不在列表中,因此没有返回她。是的,它使用唯一标识符。这只是为了让事情更容易理解。