从表中选择记录,其中两列不存在于另一个表中

时间:2016-03-08 02:18:07

标签: sql sql-server tsql sql-server-2012

我有Table1:

Id      Program Price   Age
12345   ABC     10      1
12345   CDE     23      3
12345   FGH     43      2
12346   ABC     5       4
12346   CDE     2       5
12367   CDE     10      6

和表2:

ID      Program BestBefore
12345   ABC     2
12345   FGH     3
12346   ABC     1

我想获得以下表格,

Id      Program  Price  Age
12345   CDE      10     1
12346   CDE      2      5
12367   CDE      10     6

从第一个表中获取ID + Program不在第二个表中的行。我正在使用MS SQL Server Express 2012,我不想在原始数据库中添加任何列。是否可以不创建临时变量?

2 个答案:

答案 0 :(得分:5)

有几种方法可以执行此操作,其中一种方法是使用not exists

select *
from table1 t1
where not exists (
    select 1
    from table2 t2 
    where t1.id = t2.id and t1.program = t2.program
)

答案 1 :(得分:1)

一种可能的变体是使用LEFT JOIN

SELECT
    Table1.*
FROM
    Table1
    LEFT JOIN Table2
        ON  Table1.ID = Table2.ID
        AND Table1.Program = Table2.Program
WHERE
    Table2.ID IS NULL