SQL での LIKE 結合の実行
結合を使用して 2 つのテーブル間の値を一致させる場合、1 つのテーブルの列が一致しない場合があります。別のテーブルの列の一部と一致する必要があります。これは、多くの場合、結合条件で LIKE 演算子を使用して実現されます。
テーブル A とテーブル B という 2 つのテーブルがあり、テーブル A の列 A が「like」であるという条件でそれらを結合したいとします。テーブル B の columnB。これは、一致には、columnB の完全な値、またはその前後の文字が含まれる可能性があることを意味します。
Using INSTR:
1 つの方法は、次の方法です。結合条件での INSTR() 関数:
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON INSTR(B.columnB, A.columnA) > 0</code>
LIKE の使用:
もう 1 つのオプションは、ワイルドカードを含む LIKE 演算子を使用することです:
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON B.columnB LIKE '%'+ A.columnA +'%'</code>
CONCAT で LIKE を使用する:
CONCAT() 関数を使用して、ワイルドカード記号と列の値を連結することもできます:
<code class="sql">SELECT * FROM TABLE A JOIN TABLE B ON B.columnB LIKE CONCAT('%', A.columnA ,'%')</code>
大文字変換:
大文字と小文字を区別せずに一致させるには、列の値を比較する前に大文字に変換することをお勧めします:
<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>
効率に関する考慮事項:
これらの方法の効率は、特定のデータベースとテーブルの構造によって異なる場合があります。 EXPLAIN プランの出力を確認して、最適なアプローチを決定することをお勧めします。
ANSI JOIN と非 ANSI JOIN:
ANSI JOIN は標準化された構文に従いますが、ANSI JOIN は標準化された構文に従いません。 ANSI JOIN は、より伝統的な構文を使用します。この場合、JOIN 句は非 ANSI JOIN の WHERE 句と同等です。
<code class="sql">SELECT * FROM TABLE A, TABLE B WHERE INSTR(B.columnB, A.columnA) > 0</code>
ANSI JOIN を使用すると、WHERE 句のフィルタ条件から結合条件を分離できるという利点があります。
以上がSQL で LIKE 結合を実行する方法: INSTR、LIKE、または CONCAT?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。