如何查找一个表中的哪些记录在另一个表中没有相应的记录 [已关闭]

How do I find which records in a table have no corresponding record in another table [closed]

提问人:Oedum 提问时间:11/21/2011 最后编辑:Lou FrancoOedum 更新时间:11/22/2011 访问量:92

问:


这个问题似乎偏离了主题,因为它缺乏足够的信息来诊断问题。更详细地描述您的问题,或在问题本身中包含一个最小的示例

9年前关闭。

我的数据库中有两个表。一个叫人,一个叫团队。一个人可以在一个团队中。 如何使用 LINQ 或 sql 检查是否亲自查找不在团队中的所有人员?

SQL 数据库 LINQ

评论

0赞 Oedum 11/21/2011
只有显示那里的东西
4赞 Utku Yıldırım 11/21/2011
提出一个适当的问题,给出示例表数据,示例结果。
0赞 Richard 11/21/2011
你需要更具体一点,如果我们不允许使用LINQ或SQL,我们应该使用什么?
1赞 Adam Robinson 11/21/2011
@Richard:他似乎在寻求使用其中任何一种的解决方案。我认为任何一个都是允许的。
0赞 Oedum 11/21/2011
您被分配使用 linq 或 SQL...这只是如何找到不在团队中的人

答:

0赞 Johnie Karr 11/21/2011 #1

你是说这样的东西?

 select *
 from person p
 join team t
 on p.TeamId = t.TeamId
 where p.TeamId <> 3

或在 LINQ 中:

from p in persons
join t in teams on p.TeamId equals t.TeamId
where t.TeamId != 3
select p

这两个查询都将返回 ID 为 3 的团队中不属于所有人员。

评论

0赞 Johnie Karr 11/21/2011
这是一个通用的解决方案,但如果社区知道您的表定义,那么我们可以更具体。
0赞 Adam Robinson 11/21/2011
他似乎在寻找一个根本不在团队中的人,而不是不在特定团队中的人。
0赞 Johnie Karr 11/21/2011
我想我只是误读了这个问题,然后:)
0赞 Adam Robinson 11/21/2011
显然不是!看起来你得到了复选标记;)
0赞 Johnie Karr 11/21/2011
如果我确实得到了复选标记,它就会被拿走:(
3赞 Mikael Eriksson 11/21/2011 #2

一个人可以在一个团队中

这让我猜到您在人员的表中有一个 TeamID FK 字段,该字段可以具有 null 值。

如何检查以找到所有不在团队中的人

这将给你所有不在团队中的人。

select *
from person
where TeamID is null
0赞 Lou Franco 11/21/2011 #3

你如何表示一个人与团队的联系。您是否亲自使用 teamID 字段?如果是这样,当一个人不在团队中时,你会怎么做?保持 null?

select * from person where teamID is null

将其设置为 -1?

select * from person where teamID == -1

也许你有一个person_team交叉表(这很奇怪,因为你说一个人只能在一个团队中)。㞖

SELECT * FROM person LEFT OUTER JOIN person_team
 ON (person.id = person_team.personID)
 WHERE person_team.personID IS NULL    

或者,如果您有其他事情,请告诉我们。

评论

0赞 Adam Robinson 11/21/2011
如果它不包括“幻数”方法,我会投赞成票。
0赞 Lou Franco 11/21/2011
我不是在建议它 - 但是,如果他使用它,这就是选择的方式。