工作中要維護一張表,這張表根據另乙個部門發過來的excel檔案更新。每次發過來的excel檔案跟我當前的表相比,或者多了幾條記錄,或者少了幾條記錄。減少的記錄我不用刪除,因為我的表是個歷史記錄,新增的記錄我要新增到表裡面去。從近千條記錄裡找出新增的專案,靠人工是不現實的,要用sql語句完成這項工作。
把我維護的表稱為a表,excel檔案匯入的表稱為b表,我的工作包括兩個目標,一是根據b表更新a表中相關的記錄,另乙個是把b表中有而a表中沒有的記錄新增到a表中。在工作中對sql語言又獲得了一些經驗,這裡把它記錄下來。雖然我要做的事是找出兩張表中不同的記錄,我的經驗先從找出匹配的記錄開始。
表a: id(primary key) name 表b: id(primary key) name
01 北京 01 北京
02 上海 02 上海
03 天津 04 杭州
04 杭州 05 廣州
06 成都
我嘗試了select語句不同的表達方法,雖然結果相同,但背後的邏輯是不太一樣的。
1、select a.id, a.name from a inner join b on a.id=b.id;
感覺這個寫法比較簡潔,inner join 幫你把相同的記錄篩選出來了,我只是把我要的字段列一下。
注意在access中,返回的查詢下部有新增記錄空白行。
2、select a.id, a.name from a, b where (a.id=b.id);
我分析下來,這樣寫相當於自己在完成 inner join的工作。詳細的步驟應該是:a中全部記錄跟b中第一條記錄逐一對比,找到相符的就記錄下來;a中全部記錄再跟b中第二條記錄逐一對比,相符的記錄下來;如此類推,直到b表的最後一條記錄。
注意在access中,返回的查詢下部「沒有」新增記錄空白行。
3、select a.id, a.name from a, b where a.id in (b.id);
注意在access中,返回的查詢下部「沒有」新增記錄空白行。
4、select a.id, a.name from a where a.id in (select b.id from b);
這裡用到了「子查詢」。注意在access中,返回的查詢下部有新增記錄空白行。
兩張表關聯比較記錄是否相同
問題 已知兩張表ta tb,這兩張表的表結構完全相同。現在有這樣的要求,ta是根據要求按一定頻率抽取的資料,tb是儲存發生變化的表。每次抽取ta表,都會比較ta tb表,看這兩個表中是否存在完全一樣的資料項值。例子 ta tb的主鍵是ca1,則使用ta和tb表中的其他字段值比較 on ta.ca1 ...
collection 兩張表查詢
場景 兩張表 學生基礎資訊表a,學生成績表b,兩張表通過userid關聯 返回結果 以學生為維度返回列表,學生有乙個外部屬性 成績列表 語文 100 張三 u001 成績 數學 99 英語 88 李四 u002 成績 語文 66 數學 77 英語 99 王五 u003 成績 語文 22 數學 55 ...
oracle中兩張表資料比較
資料庫 oracle 在某些情況下,我們會需要比較兩張表的資料是否一樣。假設有兩張表a與表b他的字段相同,但是當中的資料可能不同,而且有些欄位的資料還有可能為空 方法一 手動 把需要比較的兩張表的資料按照某種規則排序後匯出為xls,這裡我直接用pl sql developer匯出 然後用把xls檔案...