mysql實(shí)現(xiàn)合并結(jié)果集并去除重復(fù)值
mysql 合并結(jié)果集并去除重復(fù)值
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;
先去除每個(gè)結(jié)果集中的重復(fù)值 以 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?

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

新的查詢結(jié)果

此語(yǔ)句為了刪除分類表中 在goods表中不存在的 分類id 且 級(jí)別為第二級(jí)別

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

