最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

踩坑MySQL UNION和ORDER BY混用的問(wèn)題及解決

 更新時(shí)間:2025年09月12日 09:14:57   作者:咖啡Beans  
MySQL中UNION合并多個(gè)子集時(shí),內(nèi)部ORDER BY可能失效,解決方法:各子集添加LIMIT,外層再包裹SELECT并使用ORDER BY,確保整體排序正確

摘要

本文介紹MySQL中使用union多個(gè)子集導(dǎo)致排序失效的場(chǎng)景如何解決。

失效場(chǎng)景復(fù)現(xiàn)

目的

想先讓A表按id升序,再讓B表按id降序,然后拼在一起,最終想保證順序一致

(SELECT id, name FROM A ORDER BY id ASC)
UNION
(SELECT id, name FROM B ORDER BY id DESC);

結(jié)果

A或B內(nèi)單獨(dú)查詢順序無(wú)誤,但UNION后排序反而亂了…

原因

mysql8.0官方給的解釋是:UNION分支里的ORDER BY會(huì)被優(yōu)化器直接扔掉,想讓單個(gè)分支先排好序,必須在該分支里再加一個(gè)LIMIT任意大數(shù),并且最后把整個(gè)UNION再包一層SELECT,在最外層寫ORDER BY。

正確寫法

  • 多子集排序字段一致:
SELECT * FROM (
  SELECT id, name, 1 AS seq    -- 用常量列保住先后順序
  FROM A
  ORDER BY id ASC
  LIMIT 99999999    -- 必須加LIMIT,否則ORDER BY會(huì)被優(yōu)化掉
) a
UNION
SELECT * FROM (
  SELECT id, name, 2 AS seq
  FROM B
  ORDER BY id DESC
  LIMIT 99999999
) b
ORDER BY seq, id;    -- 外層再按需要整體排序
  • 多子集排序字段不一致:
SELECT * FROM (
  SELECT id, create_time, 1 AS seq    -- 用常量列保住先后順序
  FROM table_A
  ORDER BY create_time ASC
  LIMIT 99999999    -- 必須加LIMIT,否則ORDER BY會(huì)被優(yōu)化掉
) a
UNION
(
  SELECT id, create_time, 2 AS seq
  FROM table_B
  ORDER BY id DESC
  LIMIT 99999999
) b
ORDER BY seq;    -- 僅保證先A后B,不再對(duì)內(nèi)部二次排序

總結(jié)

以上我們了解了mysql中union多個(gè)子集時(shí)防止子集內(nèi)的排序失效的做法,子集寫limit,外層再包含,最終再order。

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL中l(wèi)ength()、char_length()的區(qū)別

    MySQL中l(wèi)ength()、char_length()的區(qū)別

    在MySQL中l(wèi)ength(str)、char_length(str)都屬于判斷長(zhǎng)度的內(nèi)置函數(shù),本文主要介紹了MySQL中l(wèi)ength()、char_length()的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL字段值如何區(qū)分大小寫問(wèn)題

    MySQL字段值如何區(qū)分大小寫問(wèn)題

    這篇文章主要介紹了MySQL字段值如何區(qū)分大小寫問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關(guān)于mysql的時(shí)區(qū)問(wèn)題

    關(guān)于mysql的時(shí)區(qū)問(wèn)題

    這篇文章主要介紹了關(guān)于mysql的時(shí)區(qū)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家,
    2023-11-11
  • MySQL判斷空值的三種方法

    MySQL判斷空值的三種方法

    在創(chuàng)建表時(shí),可以指定的列是否可以不包含值,如果在一個(gè)列不包含值,則其稱其為空值NULL,NULL一個(gè)特殊值,代表缺失的值或者不適用的情況,表示未知數(shù)據(jù),本文給大家介紹了MySQL判斷空值的三種方法,需要的朋友可以參考下
    2024-03-03
  • Mysql數(shù)據(jù)庫(kù)中datetime、bigint、timestamp來(lái)表示時(shí)間選擇,誰(shuí)來(lái)存儲(chǔ)時(shí)間效率最高

    Mysql數(shù)據(jù)庫(kù)中datetime、bigint、timestamp來(lái)表示時(shí)間選擇,誰(shuí)來(lái)存儲(chǔ)時(shí)間效率最高

    這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)中datetime、bigint、timestamp來(lái)表示時(shí)間選擇,誰(shuí)來(lái)存儲(chǔ)時(shí)間效率最高,針對(duì)這一問(wèn)題每人回答方式各不相同,下面分享下我的個(gè)人想法,需要的朋友可以參考下
    2021-08-08
  • MySQL之Innodb_buffer_pool_size設(shè)置方式

    MySQL之Innodb_buffer_pool_size設(shè)置方式

    這篇文章主要介紹了MySQL之Innodb_buffer_pool_size設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql整數(shù)數(shù)據(jù)類型深入解析

    mysql整數(shù)數(shù)據(jù)類型深入解析

    本篇文章是對(duì)mysql中的整數(shù)數(shù)據(jù)類型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • HAProxy+mysql實(shí)現(xiàn)負(fù)載均衡實(shí)踐

    HAProxy+mysql實(shí)現(xiàn)負(fù)載均衡實(shí)踐

    文章簡(jiǎn)要介紹了HAProxy的安裝配置方法,包括準(zhǔn)備服務(wù)器環(huán)境、安裝HAProxy、配置balance算法和mysql負(fù)載均衡等,最后給出了配置文件示例和查看狀態(tài)的方法
    2026-04-04
  • MySQL數(shù)據(jù)庫(kù)?觸發(fā)器?trigger

    MySQL數(shù)據(jù)庫(kù)?觸發(fā)器?trigger

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)?觸發(fā)器?trigger,觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程,觸發(fā)器通過(guò)事件進(jìn)行觸發(fā)而被執(zhí)行,可通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改,保證數(shù)據(jù)安全,進(jìn)行安全校驗(yàn)
    2022-06-06
  • MySQL中or語(yǔ)句用法示例

    MySQL中or語(yǔ)句用法示例

    這篇文章主要介紹了MySQL中or語(yǔ)句用法示例,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10

最新評(píng)論

鄂托克前旗| 玛沁县| 舟山市| 清远市| 麻栗坡县| 区。| 罗平县| 桑植县| 阿勒泰市| 娄底市| 台中市| 高淳县| 彭山县| 达拉特旗| 缙云县| 吉水县| 霞浦县| 兴安县| 蓬溪县| 西贡区| 张北县| 嘉义县| 图片| 台北县| 布拖县| 沅陵县| 永嘉县| 芮城县| 临桂县| 焦作市| 农安县| 察雅县| 清新县| 成安县| 内江市| 奈曼旗| 花垣县| 武川县| 齐河县| 沁水县| 台前县|