国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

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

相關文章:
主站蜘蛛池模板: 免费观看久久 | 日韩成人一级 | 免费久| 国产精品久久久久久亚洲伦理 | 国产一区二区三区欧美 | 中文字幕国产亚洲 | 91网站国产| 免费观看欧美一级片 | 91社区视频| 毛片在线看网站 | 超级碰碰碰视频视频在线视频 | 国产一区二区成人 | 国产亚洲精品久久久久久久久激情 | 中文字幕一二三四区2021 | a级做爰视频免费观看 | 国产成人mv 在线播放 | 成年午夜 | 国产超清在线观看 | 国产精品久久久久久久久久影院 | 精品国产免费人成在线观看 | 伊人久久影视 | 可以看的毛片网站 | 久久国内精品自在自线软件 | 国产区一区 | 青青草福利视频 | 欧美在线a | 久草福利资源在线观看 | 欧美亚洲日本国产 | 国产a一级 | 久久久久爽亚洲精品 | 欧美日韩一区二区在线观看 | 欧美操操操| 国产美女操 | 日本女人www | 在线日韩三级 | 欧美日韩专区国产精品 | 免费看欧美xxx片 | 亚州一级毛片在线 | 另类视频综合 | 久久国产影院 | 午夜私人影院免费体验区 |