mysql實現(xiàn)合并結果集并去除重復值
mysql 合并結果集并去除重復值
SELECT DISTINCT c.parent_id from (? ? ?SELECT parent_id? FROM tp_goods_category a join tp_goods g on a.id = g.cat_id GROUP BY parent_id UNION ALL? SELECT cat_id FROM tp_goods GROUP BY cat_id ) c;
先去除每個結果集中的重復值 以 group by 方式除去
SELECT parent_id? FROM tp_goods_category a join tp_goods g on a.id = g.cat_id GROUP BY parent_id? SELECT cat_id FROM tp_goods GROUP BY cat_id?

然后合并兩個結果集 生成一個新的結果集 (或者可以成為新表) 在 使用DISTINCT 去除合并結果集中的重復值 注意 必須給 新結果集取一個別名 比如例子中的 c

新的查詢結果

此語句為了刪除分類表中 在goods表中不存在的 分類id 且 級別為第二級別

mysql 合并結果集(union,union all)
我需要在一個sql的執(zhí)行結果中,顯示兩個或兩個以上的where條件的結果(select 列的結構相同)。
考慮使用union,或union all 。
union 與 union all 執(zhí)行結果不同
UNION 刪除重復的記錄再返回結果,即對整個結果集合使用了DISTINCT。結果中無重復數(shù)據(jù)。
UNION ALL 將各個結果合并后就返回,不刪除重復記錄。如果結果中有重復數(shù)據(jù),則包含重復數(shù)據(jù)。
例如,
mysql> SELECT * FROM world.city where ID=2020 UNION SELECT * FROM world.city where ID=2020; +------+-------+-------------+--------------+------------+ | ID ? | Name ?| CountryCode | District ? ? | Population | +------+-------+-------------+--------------+------------+ | 2020 | Tieli | CHN ? ? ? ? | Heilongjiang | ? ? 265683 | +------+-------+-------------+--------------+------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM world.city where ID=2020 UNION ALL SELECT * FROM world.city where ID=2020; +------+-------+-------------+--------------+------------+ | ID ? | Name ?| CountryCode | District ? ? | Population | +------+-------+-------------+--------------+------------+ | 2020 | Tieli | CHN ? ? ? ? | Heilongjiang | ? ? 265683 | | 2020 | Tieli | CHN ? ? ? ? | Heilongjiang | ? ? 265683 | +------+-------+-------------+--------------+------------+ 2 rows in set (0.00 sec)
對UNION,UNION ALL的結果繼續(xù)處理,需要加括號
比如要對合并后的結果集進行ORDER BY,LIMIT等操作需要對合并對象單個的SELECT語句加上括號。
并且把整體結果的條件ORDER BY,LIMIT等放到最后一個SELECT的括號后面。
例如,
(SELECT * FROM world.city WHERE CountryCode = 'JPN' AND Name LIKE 'nishi%')? UNION ALL? (SELECT * FROM world.city WHERE CountryCode = 'CHN' AND Population >= 5000000)? LIMIT 5;
mysql中,UNION,UNION ALL的性能/效率不同
從效率上說,UNION ALL 要比UNION快很多。
所以,如果可以確認合并的結果集中不包含重復的數(shù)據(jù)的話,或者需要的結果中即使包含重復也無所謂,那么就使用UNION ALL。
UNION
- UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產(chǎn)生的結果集進行排序運算。
- UNION在運行時先取出各個表/各個select的結果,再用排序空間進行排序刪除重復的記錄,最后返回結果集,如果表數(shù)據(jù)量大的話可能會導致用磁盤進行排序。
UNION ALL
- UNION ALL只是簡單的將結果合并后就返回。不涉及排序運算。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Mysql?InnoDB引擎中的數(shù)據(jù)頁結構詳解
這篇文章主要為大家介紹了Mysql?InnoDB引擎中的數(shù)據(jù)頁結構詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
MySQL學習之數(shù)據(jù)庫表五大約束詳解小白篇
本篇文章非常適合MySQl初學者,主要講解了MySQL數(shù)據(jù)庫的五大約束及約束概念和分類,有需要的朋友可以借鑒參考下,希望可以有所幫助2021-09-09
win10下mysql 8.0.16 winx64安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了win10下mysql 8.0.16 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05
mysql 如何插入隨機字符串數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了mysql 如何插入隨機字符串數(shù)據(jù)的實現(xiàn)方法,需要的朋友可以參考下2016-09-09
Mysql系列SQL查詢語句書寫順序及執(zhí)行順序詳解
這篇文章主要為大家介紹了Mysql系列SQL查詢語句的書寫順序及執(zhí)行順序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10
windows下修改Mysql5.7.11初始密碼的圖文教程
這篇文章主要介紹了windows下修改Mysql5.7.11初始密碼的圖文教程,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2016-11-11
MYSQL ZIP免安裝版配置步驟及圖形化管理工具mysql-workbench
在 windows7 64位操作系統(tǒng)下配置mysql-5.5.25-winx64 (免安裝版),記錄步驟如下2014-03-03

