Durchführen eines LIKE-Joins in SQL
Beim Abgleichen von Werten zwischen zwei Tabellen mithilfe eines Joins kann es vorkommen, dass eine Spalte aus einer Tabelle muss mit einem beliebigen Teil einer Spalte aus einer anderen Tabelle übereinstimmen. Dies wird oft durch den LIKE-Operator in der Join-Bedingung erreicht.
Angenommen, Sie haben zwei Tabellen, Tabelle A und Tabelle B, und Sie möchten sie unter einer Bedingung verbinden, bei der SpalteA in Tabelle A „like“ ist. SpalteB in Tabelle B. Dies bedeutet, dass die Übereinstimmung den vollständigen Wert in SpalteB oder Zeichen davor oder danach enthalten könnte.
Verwenden von INSTR:
Eine Methode ist die Verwendung die INSTR()-Funktion in der Join-Bedingung:
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON INSTR(B.columnB, A.columnA) > 0</code>
Verwendung von LIKE:
Eine andere Möglichkeit besteht darin, den LIKE-Operator mit Platzhaltern zu verwenden:
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON B.columnB LIKE '%'+ A.columnA +'%'</code>
LIKE mit CONCAT verwenden:
Sie können die Platzhaltersymbole auch mit dem Spaltenwert verketten, indem Sie die Funktion CONCAT() verwenden:
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON B.columnB LIKE CONCAT('%', A.columnA ,'%')</code>
Konvertierung von Großbuchstaben:
Um Übereinstimmungen ohne Berücksichtigung der Groß- und Kleinschreibung sicherzustellen, wird empfohlen, die Spaltenwerte vor dem Vergleich in Großbuchstaben umzuwandeln:
<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>
Effizienzüberlegungen:
Die Effizienz dieser Methoden kann je nach den spezifischen Datenbank- und Tabellenstrukturen variieren. Es ist ratsam, die Ausgabe des EXPLAIN-Plans zu überprüfen, um den optimalsten Ansatz zu ermitteln.
ANSI vs. Nicht-ANSI-JOINs:
ANSI-JOINs folgen einer standardisierten Syntax, während Nicht-ANSI-JOINs einer standardisierten Syntax folgen. ANSI JOINs verwenden eine traditionellere Syntax. In diesem Fall entspricht die JOIN-Klausel der WHERE-Klausel in einem Nicht-ANSI-JOIN:
<code class="sql">SELECT * FROM TABLE A, TABLE B WHERE INSTR(B.columnB, A.columnA) > 0</code>
Die Verwendung von ANSI-JOINs bietet den Vorteil, dass die Join-Bedingung von der Filterbedingung in der WHERE-Klausel getrennt wird.
Das obige ist der detaillierte Inhalt vonWie führe ich einen LIKE-Join in SQL durch: INSTR, LIKE oder CONCAT?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!