久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

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

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

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

問題描述

有兩張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

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

問題解答

回答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)文章:
主站蜘蛛池模板: 巴中市| 滕州市| 汉阴县| 资兴市| 酒泉市| 慈利县| 永定县| 孝感市| 寿宁县| 香格里拉县| 德化县| 曲阜市| 曲阳县| 夏邑县| 饶平县| 康定县| 定州市| 柯坪县| 启东市| 荔波县| 乌兰浩特市| 呼玛县| 南安市| 塘沽区| 肇源县| 姚安县| 满城县| 北宁市| 白山市| 布尔津县| 囊谦县| 新竹县| 南宁市| 进贤县| 江安县| 郑州市| 泽州县| 方正县| 社会| 德化县| 南阳市|