iT邦幫忙

0

Oracl 有辦法比對兩次查詢的結果嗎?

各位前輩好,最近想在資料庫上查出不同年份的資料,所下的sql如下
select BAN_NO,CERTIFICATE_NO,TO_CHAR(EFFECTIVE_DATE, 'YYYY-MM-DD')
from AEO_CERTIFICATE
where EFFECTIVE_DATE >= TO_DATE('20090101','yyyyMMDD')
and EFFECTIVE_DATE <= TO_DATE('20091231','yyyyMMDD')
and CERTIFICATE_NO != 'null'
order by EFFECTIVE_DATE ;

其中依照不同的年份下去改變此片段,所以會有多個查詢結果
EFFECTIVE_DATE >= TO_DATE('20100101','yyyyMMDD')
and EFFECTIVE_DATE <= TO_DATE('20101231','yyyyMMDD')

但是這些不同的年份資料中的編號會有重複的編號,請問我有辦法在下sql時將兩次的查詢結果相互比對並去除掉嗎?

kekeke iT邦新手 5 級 ‧ 2020-04-24 17:40:04 檢舉
+看看 SELECT DISTINCT 呢??
尼克 iT邦高手 1 級 ‧ 2020-04-24 17:58:03 檢舉
你的要的結果很不清楚,或許是WHERE的條件問題。
pojen iT邦新手 1 級 ‧ 2020-04-26 10:45:07 檢舉
你的 SELECT 中包含 EFFECTIVE_DATE, 理論來說整行是不可能有重複的. (因為 2009 的日期不會等於 2010 的日期) 如果你要的是 2009 出現的 BAN_NO, CERTIFICATE_NO, 但不在 2010 出現, 那你可以用海綿寶寶的 SQL, 將 UNION 改成 MINUS.

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-04-24 21:25:16

一言以蔽之
聯集 UNION

select BAN_NO,CERTIFICATE_NO,TO_CHAR(EFFECTIVE_DATE, 'YYYY-MM-DD')
from AEO_CERTIFICATE
where EFFECTIVE_DATE >= TO_DATE('20090101','yyyyMMDD')
and EFFECTIVE_DATE <= TO_DATE('20091231','yyyyMMDD')
and CERTIFICATE_NO != 'null'

UNION

select BAN_NO,CERTIFICATE_NO,TO_CHAR(EFFECTIVE_DATE, 'YYYY-MM-DD')
from AEO_CERTIFICATE
where EFFECTIVE_DATE >= TO_DATE('20100101','yyyyMMDD')
and EFFECTIVE_DATE <= TO_DATE('20101231','yyyyMMDD')
and CERTIFICATE_NO != 'null'

ORDER BY EFFECTIVE_DATE ;

我要發表回答

立即登入回答