USING() 是 ON 條件的簡寫,要求兩表擁有同名欄位且作為連接鍵。
-- USING 寫法
SELECT a.*, b.* FROM a LEFT JOIN b USING (colA);
-- 等價 ON 寫法
SELECT a.*, b.* FROM a LEFT JOIN b ON a.colA = b.colA;
SELECT a.*, b.*, c.*
FROM a
LEFT JOIN b USING (colA) -- colA 在 a,b 皆存在
LEFT JOIN c USING (colB); -- colB 在 a,c 皆存在 (注意:非 b,c)
陷阱:後續 USING 欄位必須存在於結果集目前所有表中,上例 colB 需在 a 與 c 同時存在,而非 b 與 c。
| 場景 | 建議 |
|---|---|
| 雙表同名 PK/FK 連接 | ✅ 簡潔優雅 |
| 多表星狀連接 (同一維度鍵) | ✅ 如 fact 表連多個 dimension 表共用 dim_id |
| 欄位名稱不同 | ❌ 必須用 ON a.id = b.fk_id |
| 複合條件/非等值連接 | ❌ 必須用 ON |
| 需在 SELECT 輸出連接鍵 | ⚠️ USING 只輸出一次,ON 需指定 a.colA 或 b.colA |
ON 完全一致,無效能差異。結論:同名鍵的簡單等值連接首選 USING(),可讀性高;其餘情況一律用 ON。