SQL查询2表中查找表2中的缺失值

时间:2016-09-28 19:52:09

标签: sql

我在SQL中有2个表。

- 表1 -

  • 名称
  • ID

- 表2 -

  • ID

  • 活动

表1仅为每家公司保留一条记录。在表2中,表1中的记录可以有多个条目。因此,我可以在ID = ID上将两个表连接在一起,并获得0到7个结果。我需要查询我正在寻找表1中不属于特定程序的任何公司的2个表,但是他们可以在其他程序中。我知道这很容易做到,但我无法让它为我工作。

3 个答案:

答案 0 :(得分:1)

using (var context = new BloggingContext()) 
{ 
    var blogNames = context.Database.SqlQuery<string>( 
                       "SELECT Name FROM dbo.Blogs").ToList(); 
}

只需使用OUTER JOIN将程序要求放在连接条件上,然后说出Table2的记录不存在的位置。

尝试使其不那么模糊,并适应您的特定公司和计划:

SELECT *
FROM
    Table1 t1
    LEFT JOIN Table2 t2
    ON t1.id = t2.id
    AND t2.program = 'asdf'
WHERE
    t2.id IS NULL

并且存在NOT方法:

SELECT *
FROm
    Companies c
    LEFT JOIN Programs p
    ON c.Id = p.CompanyId
    AND p.Program = 'some title'
WHERE
    p.Program IS NULL

我没有显示NOT IN方法,因为我通常不会推荐它。

答案 1 :(得分:0)

SELECT t1.Name
  FROM Table1 t1
LEFT JOIN 
       Table2 t2
    ON t1.id = t2.id
WHERE t2.program IS NULL; 

答案 2 :(得分:0)

您希望公司不在您在查询中指定的程序中吗?这就是我想出的:

select  t1.*
from Table1 t1
left join Table2 t2 on t1.ID = t2.ID
where coalesce(t2.Program, '') <> 'Name of Program'  

where coalesce(t2.Program, '') not in (<comma-delimited list of programs>)