亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

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

相關文章:
主站蜘蛛池模板: 色视频一区 | 在线看片h站 | 福利国产视频 | 最新黄色网址在线观看 | 亚洲精品中文字幕一区 | 97色在线视频观看香蕉 | 国产成人一区在线播放 | 日韩欧美一区二区精品久久 | 欧美一级久久久久久久大 | 色综合久久98天天综合 | 日韩aⅴ在线观看 | 色婷婷久久免费网站 | 国产成人精品综合在线观看 | 久草在线观看福利 | 日韩一本| 国产福利专区精品视频 | 好爽好深好猛好舒服视频上 | 黄在线观看www免费看 | 在线视频国产一区 | 色国产精品一区在线观看 | 欧美人的性视频 | 91桃色视频 | 欧美一级淫片吊带丝袜 | 日本一级片在线播放 | 日韩亚洲欧美视频 | 视色4se成人午夜精品 | 亚洲狼人香蕉香蕉在线28 | 1000部啪啪未满十八勿入福利 | 国产成人精品区在线观看 | 成人夜间视频 | 久久国产视频在线观看 | 国产精品嫩草免费视频 | 麻豆国内精品久久久久久 | 欧美一区二区三区在线观看不卡 | 国产美女精品久久久久中文 | 黄色三级在线视频 | 尤物蜜芽福利国产污在线观看 | 国产成人h片视频在线观看 国产成人lu在线视频 | 女女同性一区二区三区四区 | 亚洲综合性 | 香港三级毛片 |