久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

瀏覽:114日期: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一区二区三区软件 | 青草成人免费视频 | 亚洲激情在线 | 国产美女一区二区 | 一级免费网站 | 午夜视频一区二区三区 | 国产精品三级在线 | 在线播放亚洲 | 四虎com| 久久综合中文字幕 | 大陆毛片| 亚洲欧美电影 | 日本涩涩网站 | 亚洲视频观看 | 欧美一级淫片免费看 | 精品国产91亚洲一区二区三区www | 欧美亚洲一区 | 亚洲一区二区 | 韩国电影久久影院 | 亚洲免费观看视频 | 最新国产中文字幕 | 影音先锋中文字幕在线 | 日本理伦片午夜理伦片 | 福利视频二区 | 亚洲欧美在线综合 | 色综合久久天天综合网 | 精品久久久久久久 | 久久精品国产视频 | 国产资源在线观看 | 亚洲成人精品 | 日韩在线字幕 | 韩国成人精品a∨在线观看 国产伊人av | 黄色大片在线 | 一级做a爰性色毛片免费1 | 岛国av免费观看 | 国产精品免费在线 | 日韩欧美在线观看视频网站 | 精品视频在线观看一区二区 |