我有这两张桌子:
表 A
ID 类型 SDATE EDATE 评级 1 M 2010 年 1 月 1 日 2011 年 1 月 1 日 1 M 2010 年 1 月 3 日 2011 年 1 月 4 日 B 2 A 2010 年 7 月 2 日 2015 年 1 月 31 日 C 3 M 2011 年 3 月 1 日 2012 年 1 月 20 日 B 4 A 2011 年 3 月 1 日 2012 年 1 月 20 日 B 5 M 2009 年 3 月 1 日 2009 年 3 月 1 日 6 M 2006 年 12 月 31 日 9999 年 12 月 31 日 7 A 2006 年 1 月 1 日 9999 年 12 月 31 日 B
表 B
ID 类型 SDATE EDATE 评级 1 M 2010 年 1 月 1 日 2011 年 1 月 1 日 2 A 2010 年 7 月 2 日 2015 年 1 月 31 日 C 2 A 2010 年 9 月 2 日 2015 年 1 月 31 日 C 3 M 2011 年 3 月 1 日 2012 年 1 月 20 日 B 4 A 2011 年 3 月 1 日 2012 年 1 月 20 日 C 6 M 2006 年 12 月 31 日 2015 年 12 月 31 日 7 A 2006 年 2 月 1 日 9999 年 12 月 31 日 B 8 M 2010 年 1 月 2 日 2012 年 1 月 2 日
当我执行表 A 减去表 B 时,它会得到下一个结果:
ID 类型 SDATE EDATE 评级 1 M 2010 年 1 月 3 日 2011 年 1 月 4 日 B 4 A 2011 年 3 月 1 日 2012 年 1 月 20 日 B 5 M 2009 年 3 月 1 日 2009 年 3 月 1 日 6 M 2006 年 12 月 31 日 9999 年 12 月 31 日 7 A 2006 年 1 月 1 日 9999 年 12 月 31 日 B
我已经确定了 A.id 不在 B.id 中的情况,但是如何检查它何时在其他列中有所不同?
我不允许在模式上创建任何东西,所以我必须通过查询来完成。
到目前为止,这就是我所拥有的,但它给了我不正确的数据。
with aminusb as
(
select
*
from A
minus
select
*
from B
)
select
diff.*
from
aminusb diff
,B
where
diff.id = B.id
and
diff.start_date = B.start_date
and
diff.end_date = B.end_date
and
diff.rating <> B.rating
你知道我怎么能得到不同的场景吗?
- 当一切都相等但,评级。
- 当一切都一样,但是,结束日期。
- 当没有什么是相等的但是,它具有相同的 id。
我需要获取满足每个场景的记录列表,以便人们可以详细检查它。
谢谢。