在SQL 中執行LIKE Join
使用聯結在兩個表之間匹配值時,可能會出現一個表中的列需要匹配另一個表中列的任何部分。這通常是在連接條件中使用 LIKE 運算子來實現的。
假設您有兩個表,表 A 和表 B,並且您希望在表 A 中的列 A 為“類似”的條件下連接它們表B中的columnB。這意味著匹配可以包含columnB中的完整值或其之前或之後的字元。
使用 INSTR:
一種方法是使用連接條件中的 INSTR() 函數:
SELECT *
FROM TABLE A
JOIN TABLE B ON INSTR(B.columnB, A.columnA) > 0
使用LIKE:
另一個選項是使用帶有通配符的LIKE 運算子:
SELECT *
FROM TABLE A
JOIN TABLE B ON B.columnB LIKE '%' A.columnA '%'
將LIKE 與CONCAT 結合使用:
您也可以將通配符與列連接起來使用CONCAT() 函數的值:
SELECT *
FROM TABLE A
JOIN TABLE B ON B.columnB LIKE CONCAT('%', A.columnA ,'%')
大寫轉換:
為了確保不區分大小寫的匹配,建議在比較之前將列值轉換為大寫:
SELECT *
FROM (SELECT UPPER(A.columnA) 'ua' FROM TABLE A) A
JOIN (SELECT UPPER(B.columnB) 'ub' FROM TABLE B) B ON INSTR(B.ub, A.ua) > 0
效率注意事項:
這些方法的效率可能會根據特定的資料庫和表格結構的不同而有所不同。建議檢查 EXPLAIN 計劃輸出以確定最佳方法。
ANSI JOIN 與非 ANSI JOIN:
ANSI JOIN 遵循標準化語法,而非ANSI JOIN 使用更傳統的語法。在這種情況下,JOIN 子句相當於非 ANSI JOIN 中的 WHERE 子句:
SELECT *
FROM TABLE A,
TABLE B
WHERE INSTR(B.columnB, A.columnA) > 0
使用 ANSI JOIN 具有將 WHERE 子句中的連接條件與過濾條件分開的優點。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3