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

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

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

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

相關文章:
主站蜘蛛池模板: 韩国一级毛片在线高清免费 | 一级一片免费看 | 日本一级特黄刺激爽大片 | 一级视频免费观看 | 久久国产成人精品国产成人亚洲 | 亚洲人成综合网站在线 | 国产成人免费网站在线观看 | 美女成人私密视频 | 精品人成| 国产不卡一卡2卡三卡4卡5卡在线 | 国产精品福利在线观看免费不卡 | 俺要射 | 黄色的视频免费观看 | 日本亚洲一区二区 | 国产精品偷伦视频免费观看的 | 噜噜噜福利视频在线观看 | 免费看一级黄色片 | 久久亚洲国产精品一区二区 | 日本人视频18jizz免费 | 亚洲韩精品欧美一区二区三区 | 久久中文视频 | 色狠狠一区二区三区香蕉蜜桃 | 在线黄色免费观看 | 首页亚洲国产丝袜长腿综合 | 成年男女的免费视频网站 | 青草视频免费观看 | 麻豆传媒视频网站 | 国产精品观看 | 久热re在线视频精品免费 | 麻豆传媒免费在线 | 国产小视频在线免费 | 久久亚洲国产高清 | 全免费一级毛片在线播放 | 在线h网| 久久日本精品一区二区免费 | 精品久久久久久午夜 | 午夜精品亚洲 | 国产国产人免费人成免费视频 | 特黄特级高清免费视频毛片 | 国产精品第一页在线观看 | 国产高清美女一级a毛片久久w |