av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

mysql - SQL識別兩張表不同數據

瀏覽:120日期:2022-06-13 09:00:19

問題描述

有兩張1W行左右的表,需要查詢有差異的行,現在的代碼如下:

SELECT number, versionFROM ( SELECT a.number, b.version FROM a UNION ALL SELECT b.number, b.version FROM b) tbGROUP BY number, versionHAVING COUNT(*) = 1ORDER BY number

但是問題來了,以上代碼只能查詢出不同的行,但是沒法顯示a表中有的b表中沒有的,b表中有的a表中沒有的,有沒有辦法可以在第3列標識出來?

問題解答

回答1:

按樓主意思,單表中number和version是不會重復的,兩張表的number和version建一個復合索引,然后執行以下sql

SELECT a.number, a.version,’from_a’FROM awhere not exists (SELECT 1 FROM b where a.number=b.number and a.version=b.version)union allSELECT b.number, b.version,’from_b’FROM bwhere not exists (SELECT 1 FROM a where a.number=b.number and a.version=b.version)ORDER BY number;或者SELECT a.number, a.version,’from_a’from a left join b on a.number=b.number and a.version=b.versionwhere b.id is nullunion allSELECT b.number, b.version,’from_b’from a right join b on a.number=b.number and a.version=b.versionwhere a.id is nullORDER BY number;下面這個效率可能會差點回答2:

試試full join ... where a is null or b is null。比如用Postgres:

select case when a.n is null then b.n else a.n end as n, case when a.n is null then b.v else a.v end as v, case when a.n is null then ’b’ else ’a’ end as srcfrom (values(1, 2), (2, 3), (3, 4)) as a(n, v) full join (values(6, 7), (2, 3), (3, 9)) as b(n, v) using (n, v)where a.n is null or b.n is null

結果:

n | v | src---+---+----- 1 | 2 | a 3 | 4 | a 3 | 9 | b 6 | 7 | b(4 行記錄)

相關文章:
主站蜘蛛池模板: 麻豆av一区二区三区久久 | 成人性视频免费网站 | 久久9999久久 | 精品久久久久久红码专区 | 午夜激情视频在线 | 日韩中文字幕一区 | 亚洲精品久久久一区二区三区 | 成人看片在线观看 | 亚洲精品一区中文字幕乱码 | 国产视频2021 | 国产欧美精品一区二区色综合 | 自拍偷拍视频网 | 伊人网在线看 | 精品久久久久久久 | 国产成人精品综合 | 午夜天堂精品久久久久 | 欧美一区二区三区在线观看视频 | 在线免费观看黄色 | 一本久久a久久精品亚洲 | 色综合久久天天综合网 | 国产99久久久国产精品 | 日韩欧美在线观看一区 | 中文字幕一区二区三区四区五区 | 色888www视频在线观看 | 啪啪网页 | 精品无码久久久久久国产 | 国产欧美一区二区三区久久 | 一区二区三区在线免费 | 免费久久久 | 欧美成人a | 日韩久草 | 一区二区精品 | 欧美v日韩v| 国产一区二区三区色淫影院 | 精品成人免费视频 | 一区欧美 | 欧美日韩a | 精品在线一区 | 国产精品美女久久久av超清 | 日韩中文字幕视频 | 国产精品视频一区二区三区四蜜臂 |