T-SQL中的一对多关系

Sea*_*ong 0 sql t-sql sql-server

我需要弄清楚如何使用T-SQL查找某组记录,并且我无法弄清楚如何创建WHERE子句来执行此操作.

我有一个我正在使用的SQL 2008 R2系统,在这个数据库中有几个表.一个包含人事记录,另一个包含地址.地址与外键关系的人事记录有关.例如,要获得所有人员及其所有相关地址的列表(一个人可能有多个地址),我可以写下这样的内容:

 SELECT id, name FROM personnel p
      INNER JOIN address a
      ON p.id = a.personnelid
Run Code Online (Sandbox Code Playgroud)

但是,每个地址都有一个名为isprimary0或1 的列.我需要做的是找出如何找到没有isprimary设置为1 的相关地址的所有人员.或者没有主地址的记录.

目前我的想法是建立一个临时表,其中包含未标记为主要地址的人员.然后循环遍历这些并构建具有主地址的子集.

然后从非主要人员的结果中减去Personnel With Primary表,我应该有我的列表.但是,我认为必须有一种更优雅的方式来做到这一点.有任何想法吗?

Ste*_*ord 5

试试这个,它应该得到没有匹配的主要地址的所有Personnel行:

SELECT *
FROM Personnel p
WHERE NOT EXISTS
   (SELECT * FROM Address a WHERE a.personnelId = p.id AND a.isprimary = 1)
Run Code Online (Sandbox Code Playgroud)