SQL Server:查找Table1中的行而不是Table2中的行,但需要表中的数据

时间:2016-11-24 16:49:31

标签: sql sql-server missing-data

我需要找到丢失的行,但是,我需要返回BOTH表中的数据。我检查了谷歌,但没有找到类似的问题。

TableA

thetime  real-time
1        1 pm
2        5 pm
3        7 pm
4        9 pm
5        11 pm

Table2
thedate    transaction_num  thetime
1/1/2000   111                1
1/1/2000   111                4
1/1/2000   111                5
2/1/2000   111                2
2/1/2000   111                4
2/1/2000   222                1
2/1/2000   222                5

我需要从Table2中选择table1中没有时间的日期和transaction_num,因此select语句的结果应该具有不在table2中的缺失时间的日期和trnsaction数字:

thedate    transaction_num  thetime
1/1/2000   111                2
1/1/2000   111                3
2/1/2000   111                1
2/1/2000   111                3
2/1/2000   111                5
2/1/2000   222                2
2/1/2000   222                3
2/1/2000   222                4

这是我的代码,但它给了我一个多部分绑定错误:

select t2.thedate, t2.transaction_num, t1.thetime
from table2 t2
where not exists(select t1.thetime
                 from table1 t1
                 where t2.thetime = t1.thetime)

有谁知道如何解决这个问题或者能指出我的答案? 堆栈溢出中的大多数问题都是丢失的行涉及从一个表返回数据,但我需要它用于2个表。

谢谢

1 个答案:

答案 0 :(得分:2)

似乎所有日期的所有transaction_nums都应该具有与之关联的所有时间。否则,它将被视为缺失。

为此,您最初可以交叉加入table2中的不同日期和transaction_num以及table1中的time。然后在此派生表上保持连接以获取缺少的行。

select tt.thedate, tt.transaction_num,tt.thetime
    from (
          select * from (
         (select distinct thedate,transaction_num from table2) a cross join
         (select distinct thetime from table1) b
         ) 
        ) tt
         left join table2 t2 on t2.transaction_num=tt.transaction_num and t2.thetime=tt.thetime and tt.thedate=t2.thedate
where t2.transaction_num is null and t2.thedate is null and t2.thetime is null

<强> Sample Demo