Oracle 如何獲取兩個表的差集

2021-09-12 07:11:12 字數 881 閱讀 6457

我有兩張表,客戶表和合同表;客戶表是穩定的,不常變化的,基本沒有時間限制;而合同表示不穩定的,有過期時間的;如果時間過期,則合同表作廢,使用邏輯刪除,將其失效;這時候,我有乙個需求,就是獲取客戶表中,沒有簽合同的客戶資訊;

首先,我們要知道,求兩張表是否有交,並,差,一定要使用至少1個關鍵字段來關聯,否則,兩張表何談關聯;其次,因為客戶表非常龐大,合同表也非常龐大,如果用oracle的in查詢,因為若超過1000條,肯定會報錯的,所以該方案基本可以放棄。

所以我們換一種方式,就是使用oracle中的minus關鍵字;minus表示求差集,並且使用客戶號來關聯;即a表有,但是b表沒有客戶號的記錄,放到我這個問題,就是客戶表有的客戶號,但是合同表沒有的客戶號;值得注意的是,要將資料量交大的表放前面,資料量較小的放後面;

1、基本語法

select * from table1  where ...

minus

select * from table2 where ...

2、這裡,我們只是獲取了table1中有的,但是table2中沒有的合同號,距離我們獲取table1中有的,但是table2中沒有的合同資訊還差一步;我們可以使用結果集和左連線查詢來解決:

select * from table1 t

left join (

select * from table1 where ...

minus

select * from table2 where ...

) mm on mm.cont_no = t.cont_no

3、在上文where後面省略號後面加上你需要的限制條件即可;

4、ps:在mybatis標籤裡面寫sql的時候,不要加表示結束的分號;

Java獲取兩個時間差

如果是string型別,需要轉成date型別 如 string starttime 2018 01 01 10 30 30 string endtime 2018 01 08 11 45 45 看自己的時間格式選擇對應的轉換物件 dateformat sdf new dateformat yyyy ...

兩個集合的差

題目出自杭電hdu 集合的差 以屬於a而不屬於b的元素為元素的集合稱為a與b的差集,即找出a中有的,而b中沒的。思路 1.對輸入的a,b集合進行集合內排序.2.a的元素a1依次與b中比a小的元素比較。3.若b中沒有元素與a1相等,則累加標記變數f,並把a1輸出.4.進行a1元素的下乙個元素a2與b中...

oracle 中 取兩個表的交集 差集的問題

1 intersect運算 返回查詢結果中相同的部分既他們的交集 sql select from abc 2 intersect 3 select from abc2 2 minus運算 返回在第乙個查詢結果中與第二個查詢結果不相同的那部分行記錄,即兩個結果的差集 sql select from a...