生活随笔
收集整理的這篇文章主要介紹了
【MySQL】求差集
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
項目的數(shù)據(jù)庫從Oracle更換到了MySQL,導(dǎo)致很多sql需要重寫,其中有一個sql是需要求兩個結(jié)果的差集(不要問我為什么不在Java代碼里處理,問就是老板不讓這么干),百度到一個大佬的文章,其中分析的很到位,但是那個sql在實際使用中有一定的局限性,個人認(rèn)為它實際上并不是完全的求差集(如果左表有部分?jǐn)?shù)據(jù)在右表沒有的話,則這一部分?jǐn)?shù)據(jù)查不出來,可能有些大佬說不可能存在這種情況,那可能是你的業(yè)務(wù)沒有涉及到),sql語句和鏈接我也會貼在文末,有感興趣的大佬可以去看看;另外本文的sql執(zhí)行效率在數(shù)據(jù)量比較大的情況下也沒有驗證過,如果有哪位大佬有條件,可以驗證一下告知一下小弟;
先來創(chuàng)建兩個表和數(shù)據(jù) CREATE TABLE `test1` (`id` int NOT NULL,`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;CREATE TABLE `test2` (`id` int NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;INSERT INTO `test`.`test1` (`id`, `name`, `age`) VALUES (1, 't11', 10);
INSERT INTO `test`.`test1` (`id`, `name`, `age`) VALUES (2, 't12', 11);
INSERT INTO `test`.`test1` (`id`, `name`, `age`) VALUES (3, 't13', 12);INSERT INTO `test`.`test2` (`id`, `name`, `age`) VALUES (1, 't21', 20);
INSERT INTO `test`.`test2` (`id`, `name`, `age`) VALUES (4, 't24', 24);
INSERT INTO `test`.`test2` (`id`, `name`, `age`) VALUES (5, 't25', 25);
根據(jù)數(shù)據(jù)分析,那么差集應(yīng)該是id等于2,3,4,5的數(shù)據(jù)? 直接查出各自缺的那部分,再UNION合并即可 SELECTt1.*
FROMtest1 t1LEFT JOIN test2 t2 ON t1.id = t2.id
WHEREt2.id IS NULL
UNION
SELECTt2.*
FROMtest1 t1right JOIN test2 t2 ON t1.id = t2.id
WHEREt1.id IS NULL
以上就是獲取兩個差集的整個過程了,如果有哪位大佬有更好的思路,歡迎指正; 以下是另一位大佬的求差集的sql和鏈接,有興趣的朋友可以去看看; select id FROM usertable LEFT JOIN
(select id as i from blog) as t1
ON usertable.id=t1.i where t1.i IS NULL 【Mysql】求兩個表(查詢結(jié)果)的差集_編程記錄,親測有效-CSDN博客_mysql求差集
總結(jié)
以上是生活随笔 為你收集整理的【MySQL】求差集 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。