【问题标题】:How do I find which records in a table have no corresponding record in another table [closed]如何查找表中的哪些记录在另一个表中没有对应的记录[关闭]
【发布时间】:2012-01-02 23:51:56
【问题描述】:

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

【问题讨论】:

  • 只显示那里的东西
  • 做一个适当的问题,给出示例表数据,示例结果。
  • 你需要更具体一些,如果我们不允许使用 LINQ 或 SQL,我们应该使用什么?
  • @Richard:他似乎在寻求使用 either 的解决方案。我认为任何一个都是允许的。
  • 你可以使用 linq 或 SQL...这只是如何找到不在团队中的人

标签: sql database linq


【解决方案1】:

一个人可以在一个团队中

这让我猜你在人员表中有一个 TeamID FK 字段,该字段可以有空值。

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

这将为您提供不在团队中的所有人。

select *
from person
where TeamID is null

【讨论】:

    【解决方案2】:

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

    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    
    

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

    【讨论】:

    • 如果它不包括“幻数”方法,我会赞成。
    • 我不是在建议它——但是,如果他正在使用它,那就是选择的方式。
    【解决方案3】:

    你的意思是这样的?

     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 且不在团队中的所有人员。

    【讨论】:

    • 这是一个通用解决方案,但如果社区知道您的表定义,那么我们可以更具体。
    • 他在寻找根本不属于团队的人,而不是不属于特定团队的人,看来。
    • 我想我只是错过了阅读问题然后:)
    • 显然不是!看起来你有复选标记;)
    • 如果我确实得到了复选标记,它就被拿走了:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多