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連接時出現(xiàn)2003錯誤的實現(xiàn)
本文主要介紹了MySQL連接時出現(xiàn)2003錯誤的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05安裝MySQL 5后無法啟動(不能Start service)解決方法小結
有時候我們在安裝mysql軟件時,卻無法啟動,或服務器安全設置以后都可能導致mysql無法運行2012-07-07連接MySql速度慢的解決方法(skip-name-resolve)
這篇文章主要介紹了連接MySql速度慢的解決方法(skip-name-resolve),需要的朋友可以參考下2015-09-09MySQL表LEFT JOIN左連接與RIGHT JOIN右連接的實例教程
這篇文章主要介紹了MySQL表LEFT JOIN左連接與RIGHT JOIN右連接的實例教程,表連接操作是MySQL入門學習中的基礎知識,需要的朋友可以參考下2015-12-12解決Navicat for MySQL 連接 MySQL 報2005錯誤的問題
在本地MySQL的服務啟動后,由于Navicat的一些功能需要聯(lián)網(wǎng)才可以使用,今天重點給大家介紹Navicat for MySQL 連接 MySQL 報2005 -Unknown MySQL server host ‘localhost’(0)錯誤的情況與解決方法,感興趣的朋友一起看看吧2021-05-05