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

MySQL中使用自定義變量 編寫偷懶的UNION示例

 更新時(shí)間:2013年07月29日 08:50:43   作者:  
以下是對(duì)MySQL中使用自定義變量,編寫一個(gè)UNION的示例進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下

(參考自<<高性能MySQL>>)
假設(shè)有這樣的需求:寫一個(gè)UNION查詢,其第一個(gè)子查詢作為分支先執(zhí)行,如果找到了匹配的行,則不再執(zhí)行第二個(gè)分支的查詢。

一般來說,我們可以寫出這樣的UNION查詢:

復(fù)制代碼 代碼如下:

select id from users where id=123456
union all
select id from users_archived where id = 123456;

此查詢可以正常運(yùn)行,但是無論在users表中是否找到記錄,都會(huì)到users_archived表中掃描一次;因此可能也會(huì)返回重復(fù)的記錄。為了減少這種情況下不必要的開銷,SQL語句可以寫成這樣:
復(fù)制代碼 代碼如下:

SELECT GREATEST(@found := -1, id) AS id, 'users' AS which_tbl
FROM users WHERE id  = 1
UNION ALL
    SELECT id, 'users_archived'
    FROM users_archived WHERE id = 1 and @found IS NULL
UNION ALL
    SELECT 1, 'reset' FROM DUAL WHERE (@found := NULL) IS NOT NLL;

上面的查詢用到了自定義變量@found,通過在結(jié)果列中做一次賦值并且放在GREATEST函數(shù)中,以避免返回額外的數(shù)據(jù)。如果第一個(gè)分支查詢結(jié)果集為NULL,那@found自然也還是NULL,因此會(huì)執(zhí)行第二個(gè)分支查詢。另外,為了不影響后面的遍歷結(jié)果,在查詢的末尾將@found重置為NULL。

另外, 返回的第二列數(shù)據(jù)是為了說明這條記錄是在users表還是在users_archived表中查詢得到的。

相關(guān)文章

  • MYSQL的select 學(xué)習(xí)筆記

    MYSQL的select 學(xué)習(xí)筆記

    MYSQL的select 學(xué)習(xí)筆記...
    2007-02-02
  • MySQL窗口函數(shù)OVER()用法及說明

    MySQL窗口函數(shù)OVER()用法及說明

    這篇文章主要介紹了MySQL窗口函數(shù)OVER()用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 最新評(píng)論

    龙里县| 安陆市| 灯塔市| 兴化市| 泾阳县| 武夷山市| 耒阳市| 东光县| 永寿县| 宣汉县| 东海县| 徐闻县| 织金县| 大名县| 鄂伦春自治旗| 黎川县| 萨嘎县| 榆中县| 尉犁县| 喜德县| 灵石县| 镇宁| 申扎县| 阿坝县| 崇义县| 莱芜市| 奉贤区| 贡嘎县| 永州市| 平南县| 菏泽市| 玉屏| 吉水县| 阜平县| 广州市| 麻栗坡县| 金山区| 新蔡县| 新营市| 鸡西市| 延吉市|