編寫跨資料庫平台的標準 SQL 時,如何確認某語法是否符合 SQL-92/99/2003 標準?**Mimer SQL Validator** 是免費線上工具,能即時分析 SQL 語句的標準相容性、所需核心/可選特性包,本文以「行建構子 IN 列表」查詢為例演示驗證流程與結果解讀。
SELECT a, c, d
FROM mytable
WHERE (a, b) IN ((1,2), (1,4), (1,5));
場景:表 mytable 擁有複合鍵 (a,b),需一次查詢多組鍵值組合。
| 標準版本 | 合規性 | 備註/所需特性包 |
|---|---|---|
| SQL-92 | ❌ **不合規** | 不支援行值建構子 |
| SQL-99 / SQL:2003 | ✅ **合規** | 需可選特性包:F641 Row and table constructorsT051 Row typesF561 Full value expressions |
(val1, val2, ...) 行建構子出現在 IN、VALUES、INSERT 等語境。SYS.ODCIVARCHAR2LIST 等集合類型繞道實現;MySQL 8.0+ 開始支援行建構子比較。若目標資料庫不支援上述特性包,改寫為標準 SQL-92 相容形式:
SELECT a, c, d
FROM mytable
WHERE (a = 1 AND b = 2)
OR (a = 1 AND b = 4)
OR (a = 1 AND b = 5);
優勢: 通用性極強,所有成熟 RDBMS 均支援;(a,b) 為複合索引鍵時,優化器通常能識別為多值索引範圍掃描,效能不遜於行建構子寫法。
F641)