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

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

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

瀏覽:106日期: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 | 日日碰狠狠躁久久躁96avv | 久久久久久91 | 亚洲风情在线观看 | 亚洲一区二区高清 | av中文字幕在线 | 亚州无限乱码 | 国产精品无码专区在线观看 | 中文字幕精 | 久久综合九九 | 日韩在线观看一区 | 久久久蜜桃 | 犬夜叉在线观看 | 日韩精品久久一区 | 成人免费视频网站在线看 | 先锋av资源在线 | 午夜视频在线 | 亚洲美女天堂网 | 久久久91精品国产一区二区三区 | 日韩欧美一区二区三区 | 中文字幕av一区二区三区 | 亚洲欧美日韩网站 | 国产精品99免费视频 | 欧美群妇大交群中文字幕 | 国产精品成人在线播放 | 国产91在线播放 | 九九免费视频 | 亚洲视频中文字幕 | 最新国产在线 | 国产精品久久久久久久久久妇女 | 国产精品区一区二区三区 | 亚洲国产精品久久人人爱 | 91成人免费电影 | 蜜桃视频一区二区三区 | 91九色视频在线 |