溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql如何實現(xiàn)合并結(jié)果集并去除重復值

發(fā)布時間:2022-12-28 09:49:39 來源:億速云 閱讀:146 作者:iii 欄目:開發(fā)技術

本篇內(nèi)容介紹了“mysql如何實現(xiàn)合并結(jié)果集并去除重復值”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

    mysql 合并結(jié)果集并去除重復值

    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;

    先去除每個結(jié)果集中的重復值 以 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

    mysql如何實現(xiàn)合并結(jié)果集并去除重復值

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

    mysql如何實現(xiàn)合并結(jié)果集并去除重復值

    新的查詢結(jié)果

    mysql如何實現(xiàn)合并結(jié)果集并去除重復值

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

    mysql如何實現(xiàn)合并結(jié)果集并去除重復值

    mysql 合并結(jié)果集(union,union all)

    我需要在一個sql的執(zhí)行結(jié)果中,顯示兩個或兩個以上的where條件的結(jié)果(select 列的結(jié)構(gòu)相同)。

    考慮使用union,或union all 。

    union 與 union all 執(zhí)行結(jié)果不同

    UNION 刪除重復的記錄再返回結(jié)果,即對整個結(jié)果集合使用了DISTINCT。結(jié)果中無重復數(shù)據(jù)。

    UNION ALL 將各個結(jié)果合并后就返回,不刪除重復記錄。如果結(jié)果中有重復數(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的結(jié)果繼續(xù)處理,需要加括號

    比如要對合并后的結(jié)果集進行ORDER BY,LIMIT等操作需要對合并對象單個的SELECT語句加上括號。

    并且把整體結(jié)果的條件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快很多。

    所以,如果可以確認合并的結(jié)果集中不包含重復的數(shù)據(jù)的話,或者需要的結(jié)果中即使包含重復也無所謂,那么就使用UNION ALL。

    UNION

    • UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產(chǎn)生的結(jié)果集進行排序運算。

    • UNION在運行時先取出各個表/各個select的結(jié)果,再用排序空間進行排序刪除重復的記錄,最后返回結(jié)果集,如果表數(shù)據(jù)量大的話可能會導致用磁盤進行排序。

    UNION ALL

    • UNION ALL只是簡單的將結(jié)果合并后就返回。不涉及排序運算。

    “mysql如何實現(xiàn)合并結(jié)果集并去除重復值”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI