首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 模擬 Oracle DECODE 函數查詢技巧

     編輯:MySQL 資料庫相關知識

在資料庫開發中,經常需要根據條件返回不同的值。Oracle 提供了方便的 DECODE 函數,而 MySQL 則可以使用 CASE WHEN 語句達到相同效果。本文分享兩種資料庫的對應寫法,並提供測試通過的代碼範例。

建立測試表與資料

首先建立一個臨時表並插入測試資料:

CREATE TEMPORARY TABLE tmp (a INT, b INT, c INT);
INSERT INTO tmp VALUES (1,10,1), (10,10,2), (10,100,2);

MySQL 寫法:使用 CASE WHEN

MySQL 中使用標準 SQL 的 CASE WHEN 語法:

SELECT SUM(CASE WHEN c = '1' THEN a ELSE b END) FROM tmp;

Oracle 寫法:使用 DECODE

Oracle 專有的 DECODE 函數語法更簡潔:

SELECT SUM(DECODE(c, '1', a, b)) FROM tmp;

替代方案:UNION 聯合查詢

若不想使用條件表達式,也可用 UNION 組合查詢:

SELECT SUM(d) FROM (
    SELECT a AS d FROM tmp WHERE c = 1
    UNION
    SELECT b AS d FROM tmp WHERE c = 2
) AS subquery;

總結

CASE WHEN 是 ANSI SQL 標準,移植性較好;DECODE 則是 Oracle 專屬語法,寫法更緊湊。根據專案使用的資料庫選擇適當方案即可。測試環境為 MySQL,MSSQL 理論上也能執行但未實測。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved