兩個mysql表對比_mysql實用技巧之比較兩個表是否有不同數據的方法分析

本文實例講述了mysql比較兩個表是否有不同數據的方法。分享給大家供大家參考,具體如下:

在數據遷移中,我們經常需要比較兩個表,以便在一個表中標識另一個表中沒有相應記錄的記錄。

例如,我們有一個新的數據庫,其架構與舊數據庫不同。我們的任務是將所有數據從舊數據庫遷移到新數據庫,并驗證數據是否正確遷移。要檢查數據,我們必須比較兩個表,一個在新數據庫中,一個在舊數據庫中,并標識不匹配的記錄。

假設有兩個表:t1和t2。使用以下步驟比較兩個表,并確定不匹配的記錄,按著常用的思路就是,我們先查t1,完事呢,拿著數據結果集來循環,一條一條的去另一張表中查詢,能查到數據,就是正確的,查詢不到,就是數據有丟失的現象。

如果真的這樣的話,那你可就真的是啊,too young too simple了。這次呢,咱們來介紹一個比較簡單的數據對比方案,那就是使用union all關聯兩張表,完事使用臨時表或者說派生表的方式來進行數據對比。先來看下union all的sql實例吧:

SELECT t1.pk, t1.c1

FROM t1

UNION ALL

SELECT t2.pk, t2.c1

FROM t2

完事咱們就先來建立兩張表,再插入一些數據,完事就可以進行測試了,先來看建表:

CREATE TABLE t1(

id int auto_increment primary key,

title varchar(255)

);

CREATE TABLE t2(

id int auto_increment primary key,

title varchar(255),

note varchar(255)

);

完事先在t1中插入數據:

INSERT INTO t1(title)

VALUES('row 1'),('row 2'),('row 3');

再來在t2中插入數據:

INSERT INTO t2(title)

VALUES('row 1'),('row 2'),('row 3');

好,咱們接下來就是要使用派生表的方式來對比數據了哦:

SELECT id,title

FROM (

SELECT id, title FROM t1

UNION ALL

SELECT id,title FROM t2

) tbl

GROUP BY id, title

HAVING count(*) = 1

ORDER BY id;

運行之后當然是沒有任何返回數據的,因為它們是沒有什么差別的。不著急哈,咱們再來在t2表中插入一行數據:

INSERT INTO t2(title,note)

VALUES('new row 4','new');

完事我們再次比較兩個表中的title列的值,因為新行是不匹配的行將會返回,我們來看下結果:

mysql> SELECT id,title

FROM (

SELECT id, title FROM t1

UNION ALL

SELECT id,title FROM t2

) tbl

GROUP BY id, title

HAVING count(*) = 1

ORDER BY id;

+----+-----------+

| id | title |

+----+-----------+

| 4 | new row 4 |

+----+-----------+

1 row in set

好啦,這次小技巧就到這里了哦。

希望本文所述對大家MySQL數據庫計有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529875.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529875.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529875.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql數據存儲到指定位置_Mysql數據庫表分區存儲到指定磁盤路徑

. 前提:mysql5.6.6以上的版本以上的版本才支持單表指定目錄,且目錄權限是MySQL:mysql。 在mysql中數據文件存放于在my.cnf中datadir指定的路徑,使用的表引擎不同產生的文件格式、表文件個數也會有所差異。 mysql的表引擎有多種,…

roslyn分析字符串代碼_.NET 5 源代碼生成器——MediatR——CQRS

在這篇文章中,我們將探索如何使用.NET 5中的新source generator特性,使用MediatR庫和CQRS模式自動為系統生成API。中介者模式中介模式是在應用程序中解耦模塊的一種方式。在基于web的應用程序中,它通常用于將前端與業務邏輯的解耦。在.NET平臺…

mysql跟memcache的區別_MySQL-mysql Memory Storage Engine 和memcache到底有何不同?各自的優缺點是什么?...

Memory存儲引擎將表的數據存放在內存中,默認使用哈希索引,memcache同樣是使用哈希的方式將數據存在內存中,不過它們還是有比較大的區別的,我列幾條:1.MEMORY表使用固定的記錄長度格式,像VARCHAR這樣的可變長…

vb用adodb鏈接mysql找不到_VB使用ADODB操作數據庫的常用方法

ADO常用方法下面是我所掌握的使用ADO對數據庫操作的一些常用方法,主要是提供給初學者作為參考,有不對的地方請指正。如有補充不勝榮幸準備工作DimconnAsNewADODB.Connection創建一個 Connection 實例,在這里使用New等于將Dim和Set合并為一段代…

mysql2008怎么重裝_SQL Server2005、2008如何徹底刪除卸載并重新安裝?

很多小伙伴在刪除SQL Server后重新安裝總是遇到諸多問題導致安裝失敗,這是因為你沒有將SQL Server徹底刪除卸載完畢。本文就如何徹底卸載進行詳細介紹,本文以SQL Server2008為例,2005的方法相似。方法/步驟1.按照傳統方法將SQL Server 2005、…

micropython編譯原理_C語言嵌入式Linux高級編程第9期:CPU和操作系統入門視頻課程...

嵌入式開發是一門交叉學科。它要求我們的嵌入式工程師,不僅學習C語言、匯編、軟件工程等軟件層面的知識技能,還要求對CPU內部工作機制、計算機系統架構、操作系統原理、編譯器等都有一個全局的認識和把握。而現實情況是,很多嵌入式的學員&…

mysql主從復制 火墻_MySQL高級知識(十五)——主從復制

前言:本章主要講解MySQL主從復制的操作步驟。由于環境限制,主機使用Windows環境,從機使用用Linux環境。另外MySQL的版本最好一致,筆者采用的MySQL5.7.22版本,具體安裝過程請查詢相關資料。1.主從復制的基本原理slave會…

python在人工智能領域的應用論文_Python的應用領域主要在人工智能方面。-智慧樹計算機專業導論章節答案...

計算機專業導論:Python的應用領域主要在人工智能方面。【?ж???】A:錯B:對計算機專業導論章節測試答案:對更多相關問題2020年直流電弧特性虛擬仿真實驗智慧樹章節測試答案電力電子技術(山東聯盟—中國石油大學(華東))_智慧樹_答案中國大學_《說文解字》與上古社…

正則只能出現特定字符_python正則表達式的簡單使用總結

原文作者:小哲,雷鋒網在編程中,經常會涉及到字符串的操作,一個常用的策略就是利用split函數,然后對于特定的字符串進行匹配,但是這種方法格式復雜,可復用性較差。正則表達式是處理字符串匹配一個…

MySQL配置日志服務器_mysql配置數據庫日志

mysql配置數據庫日志云服務器(Elastic Compute Service,簡稱ECS)是阿里云提供的性能卓越、穩定可靠、彈性擴展的IaaS(Infrastructure as a Service)級別云計算服務。云服務器ECS免去了您采購IT硬件的前期準備,讓您像使用水、電、天然氣等公共資源一樣便捷…

python外星人入侵不顯示子彈_【Python】python外星人入侵,武裝飛船,代碼寫好后,不顯示子彈...

按照書上寫的武裝飛船,寫到能夠左右移動了,但到了射擊(裝子彈)時候,按照書上的代碼照搬了,運行時沒顯示代碼有問題,但就是按了空格鍵,不見有子彈,其他都正常。代碼:alien_invasion.p…

python常見的異常類有哪些_Python常見異常類型

標簽:常見 nic 警告 werror pytho 無效 本地變量 計算 pointBaseException     所有異常的基類SystemExit             解釋器請求退出KeyboardInterrupt          用戶中斷執行(通常是輸入^C)Exc…

mysql dos 下切換連接_如何在dos下連接進入mysql對數據庫進行操作

一、:windowsR 進入命令命令提示符輸入 net start mysql若出現系統錯誤,要將命令提示符以管理員身份運行若出現不是內部指令,進入下面環境變量設置界面,配置path路徑1.進入系統查看界面,點擊高級系統設置2&#xff0c…

mysql二級緩存redis_SpringBoot+Mybatis+redis(二級緩存)搭建

剛剛開始接觸Spring Boot,因為極簡單的配置開發,搭建一個通用的Spring BootMybaitisredis的開發框架。一、用maven構建項目,pom.xml文件如下:org.springframework.bootspring-boot-starter-parent1.5.1.RELEASEorg.springframewor…

mysql自定義兩個條件排序_使用MySQL中的兩個不同列進行自定義排序?

為此,將ORDER BY子句與CASE語句一起使用。讓我們首先創建一個表-mysql> create table DemoTable1610-> (-> Marks int,-> Name varchar(20)-> ) ;使用插入命令在表中插入一些記錄-mysql> insert into DemoTable1610 values(85,John);mysql> in…

java獲取文件大小_Java中獲取文件大小的詳解及實例代碼

Java 獲取文件大小今天寫代碼時需要實現獲取文件大小的功能,目前有兩種實現方法,一種是使用File的length()方法;另外一種是使用FileInputStream的available()方法,當InputStream未進行read操作時,available()的大小應該…

java訪問權限friendly_Java的訪問權限

一.Java訪問權限飾詞(access specifiers)Java有public、protect、friendly、private四種訪問權限,并且這四訪問權限的訪問范圍越來越小。1. friendly1) 果一個class內的數據成員或方法沒有任何權限飾詞,那么它的缺省訪問權限就是f…

java 0 255_java – 什么(float)(par4 16255)/ 255.0F;意思?

帶alpha通道的RGB(通常稱為RGBA或aRGB)是四個字節打包成一個整數.AAAAAAAARRRRRRRRBBBBBBBBGGGGGGGG // the original par4, each char represents one bit.// where ARBG stands for alpha, red, blue and green bit.shift和運算符用于檢索每個字節.例如,par4>> 16&…

java ie下載文件名亂碼問題_php中強制下載文件的代碼(解決了IE下中文文件名亂碼問題)...

中間遇到一個問題是提交的中文文件名直接放到header里在IE下會變成亂碼,解決方法是將文件名先urlencode一下再放入header,如下。$file_name urlencode($_REQUEST[filename]);header("Pragma: public"); header("Expires: 0");heade…

java如何獲得當前路徑_在java中如何得到當前路徑

歸納一些網上取java路徑的方法:注明:如果從ANT啟動程序,this.getClass().getResource("")取出來的比較怪,直接用JAVA命令行調試就可成功。得到classpath和當前類的絕對路徑的一些方法獲得CLASSPATH之外路徑的方法&#…