国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

mysql - SQL識(shí)別兩張表不同數(shù)據(jù)

瀏覽:111日期:2022-06-13 09:00:19

問(wèn)題描述

有兩張1W行左右的表,需要查詢有差異的行,現(xiàn)在的代碼如下:

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

但是問(wèn)題來(lái)了,以上代碼只能查詢出不同的行,但是沒(méi)法顯示a表中有的b表中沒(méi)有的,b表中有的a表中沒(méi)有的,有沒(méi)有辦法可以在第3列標(biāo)識(shí)出來(lái)?

問(wèn)題解答

回答1:

按樓主意思,單表中number和version是不會(huì)重復(fù)的,兩張表的number和version建一個(gè)復(fù)合索引,然后執(zhí)行以下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;下面這個(gè)效率可能會(huì)差點(diǎn)回答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

結(jié)果:

n | v | src---+---+----- 1 | 2 | a 3 | 4 | a 3 | 9 | b 6 | 7 | b(4 行記錄)

相關(guān)文章:
主站蜘蛛池模板: 北宁市| 社旗县| 进贤县| 惠来县| 锡林浩特市| 建昌县| 汉源县| 涿州市| 贡觉县| 广汉市| 镇赉县| 辉南县| 得荣县| 延川县| 乌拉特中旗| 许昌县| 若尔盖县| 邓州市| 澄城县| 安泽县| 河南省| 鄱阳县| 阳谷县| 习水县| 舒兰市| 甘孜| 舒兰市| 江山市| 靖宇县| 囊谦县| 监利县| 黄浦区| 黎平县| 如皋市| 仁布县| 瑞安市| 开封市| 清新县| 南漳县| 西平县| 广灵县|