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

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

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

瀏覽:177日期: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 | 日本久久精品 | 日韩中文字幕亚洲 | 91九色国产视频 | 激情婷婷色 | 成人小视频在线观看 | 天堂在线视频 | 一区三区视频在线观看 | 日韩精品视频在线看 | 日韩第一视频 | 麻豆av一区二区 | 成人欧美一区二区三区在线观看 | 国语一区二区 | 国内精品999 | 天天干天天草 | 黄色国产| 国产精品视频在线观看免费 | 午夜影院日本 | av黄色小说 | 亚洲欧美在线综合 | 亚洲成人资源 | 玖玖久久 | 高清av免费 | 成人午夜视频精品一区 | 亚洲自拍偷拍综合 | 黄色高清视频在线观看 | 国产福利视频在线观看 | 国产天堂第一区 | 在线观看黄色国产 | 白丝白浆 | 一区二区三区精品国产 | 色婷婷综合在线 | 91一区二区| 91精品国产欧美一区二区 | 中文字幕资源在线 | 国内精品久久久久久久影视简单 | 亚洲一区av在线 | 国产精品久久久久一区二区三区 | 欧美日韩一区精品 |