午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

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

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

瀏覽:184日期: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 | 一级黄色大片视频 | 婷婷成人av| 成人精品一区二区三区 | 亚洲最新中文字幕 | 午夜爱爱影院 | 欧美三极片 | 久久国产精品视频 | 欧洲综合网| 怡春院欧美 | 精品一区二区三区免费毛片 | av首页在线 | 一级特黄aaa | 天堂色在线| 操人视频在线观看 | 国产福利片在线 | 在线看片国产 | 性色av一区二区三区 | 黄网页在线观看 | 欧美中文字幕视频 | 亚洲图片一区 | 色老大影院 | 欧美,日韩,国产精品免费观看 | 九九九九国产 | 欧美二区在线观看 | 欧美三区四区 | 国产资源av | 欧美在线视频播放 | 欧美aaa视频 | 国产精品久久久久精 | 国产不卡在线观看 | 久久久香蕉| 日本猛少妇色xxxxx猛叫 | 天天操天天操天天操天天操 | www深夜成人a√在线 | av一级在线观看 | 天天草天天干 | 国产精品久久久久9999 | 人人色视频 | 三级网站在线免费观看 |