Maison >base de données >tutoriel mysql >Comment effectuer une jointure LIKE en SQL : INSTR, LIKE ou CONCAT ?
Effectuer une jointure LIKE en SQL
Lors de la mise en correspondance de valeurs entre deux tables à l'aide d'une jointure, il peut y avoir des cas où une colonne d'une table doit correspondre à n’importe quelle partie d’une colonne d’une autre table. Ceci est souvent réalisé en utilisant l'opérateur LIKE dans la condition de jointure.
Disons que vous avez deux tables, la table A et la table B, et que vous souhaitez les joindre à une condition où la colonne A du tableau A est "comme" columnB dans le tableau B. Cela signifie que la correspondance peut inclure la valeur complète de la colonneB ou les caractères avant ou après celle-ci.
Utilisation d'INSTR :
Une méthode consiste à utiliser la fonction INSTR() dans la condition de jointure :
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON INSTR(B.columnB, A.columnA) > 0</code>
Utilisation de LIKE :
Une autre option consiste à utiliser l'opérateur LIKE avec des caractères génériques :
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON B.columnB LIKE '%'+ A.columnA +'%'</code>
Utilisation de LIKE avec CONCAT :
Vous pouvez également concaténer les symboles génériques avec la valeur de la colonne à l'aide de la fonction CONCAT() :
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON B.columnB LIKE CONCAT('%', A.columnA ,'%')</code>
Conversion des majuscules :
Pour garantir des correspondances insensibles à la casse, il est recommandé de convertir les valeurs des colonnes en majuscules avant de les comparer :
<code class="sql">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</code>
Considérations d'efficacité :
L'efficacité de ces méthodes peut varier en fonction de la structure spécifique de la base de données et des tables. Il est conseillé de vérifier la sortie du plan EXPLAIN pour déterminer l'approche la plus optimale.
ANSI vs. Non-ANSI JOINs :
ANSI JOINs suivent une syntaxe standardisée, tandis que les non-ANSI JOINs suivent une syntaxe standardisée. Les ANSI JOIN utilisent une syntaxe plus traditionnelle. Dans ce cas, la clause JOIN est équivalente à la clause WHERE dans un JOIN non-ANSI :
<code class="sql">SELECT * FROM TABLE A, TABLE B WHERE INSTR(B.columnB, A.columnA) > 0</code>
L'utilisation des ANSI JOIN offre l'avantage de séparer la condition de jointure de la condition de filtre dans la clause WHERE.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!