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的一个项目不在列表中,因此没有返回她。是的,它使用唯一标识符。这只是为了让事情更容易理解。