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

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

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

瀏覽:121日期: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 行記錄)

相關文章:
主站蜘蛛池模板: 日韩三级精品 | 日韩亚洲一区二区 | 超碰97久久| av网址在线播放 | 狠狠干天天干 | 香蕉在线观看视频 | 五月网站| 亚洲高清在线播放 | 中文字幕在线观看网站 | 蜜桃视频成人 | 黄色日本视频 | 福利视频免费观看 | jlzzzjlzzz国产免费观看 | 国产性生活 | 色伊人网 | 四虎三级 | 黄色直接看 | 日韩精品久久久久 | 久久九九免费视频 | 成人精品一区二区三区 | 欧产日产国产69 | 97视频国产 | 亚洲激情文学 | 在线日韩 | 日本免费黄色 | 中文字幕一区二区在线播放 | 夜夜操夜夜 | 午夜在线免费观看 | 色播亚洲| 天天操夜夜 | 高潮毛片又色又爽免费 | 久久久影院 | 亚洲国产成人精品女人久久久 | 免费一级黄色 | 黄色av免费| 午夜免费小视频 | 日韩中文字幕一区 | 日日拍夜夜拍 | 欧美日韩黄 | 欧美bbb| 欧美日韩一区二区三区四区 |