我需要找到丢失的行,但是,我需要返回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个表。
谢谢
答案 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
强>