程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中應用自界說變量 編寫偷懶的UNION示例

MySQL中應用自界說變量 編寫偷懶的UNION示例

編輯:MySQL綜合教程

MySQL中應用自界說變量 編寫偷懶的UNION示例。本站提示廣大學習愛好者:(MySQL中應用自界說變量 編寫偷懶的UNION示例)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中應用自界說變量 編寫偷懶的UNION示例正文


(參考自<<高機能MySQL>>)
假定有如許的需求:寫一個UNION查詢,其第一個子查詢作為分支先履行,假如找到了婚配的行,則不再履行第二個分支的查詢。

普通來講,我們可以寫出如許的UNION查詢:

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

此查詢可以正常運轉,然則不管在users表中能否找到記載,都邑到users_archived表中掃描一次;是以能夠也會前往反復的記載。為了削減這類情形下不用要的開支,SQL語句可以寫成如許:

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,經由過程在成果列中做一次賦值而且放在GREATEST函數中,以免前往額定的數據。假如第一個分支查詢成果集為NULL,那@found天然也照樣NULL,是以會履行第二個分支查詢。別的,為了不影響前面的遍歷成果,在查詢的末尾將@found重置為NULL。

別的, 前往的第二列數據是為了解釋這筆記錄是在users表照樣在users_archived表中查詢獲得的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved