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

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

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

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

一般來(lái)說(shuō),我們可以寫出這樣的UNION查詢:

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

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

此查詢可以正常運(yùn)行,但是無(wú)論在users表中是否找到記錄,都會(huì)到users_archived表中掃描一次;因此可能也會(huì)返回重復(fù)的記錄。為了減少這種情況下不必要的開(kāi)銷,SQL語(yǔ)句可以寫成這樣:
復(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,通過(guò)在結(jié)果列中做一次賦值并且放在GREATEST函數(shù)中,以避免返回額外的數(shù)據(jù)。如果第一個(gè)分支查詢結(jié)果集為NULL,那@found自然也還是NULL,因此會(huì)執(zhí)行第二個(gè)分支查詢。另外,為了不影響后面的遍歷結(jié)果,在查詢的末尾將@found重置為NULL。

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

相關(guān)文章

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

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

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

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

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

    九寨沟县| 来安县| 莱州市| 朔州市| 沧州市| 定边县| 安泽县| 宜君县| 荣成市| 天峨县| 峡江县| 清水河县| 保亭| 措勤县| 龙海市| 高青县| 长宁区| 楚雄市| 溧水县| 邹城市| 西青区| 喜德县| 柏乡县| 台山市| 老河口市| 静乐县| 新和县| 泗阳县| 同心县| 成武县| 邵阳县| 松潘县| 同德县| 翁牛特旗| 行唐县| 昌邑市| 榆树市| 繁峙县| 竹北市| 丹阳市| 来安县|