Executando uma junção LIKE no SQL
Ao combinar valores entre duas tabelas usando uma junção, pode haver casos em que uma coluna de uma tabela precisa corresponder a qualquer parte de uma coluna de outra tabela. Isso geralmente é obtido usando o operador LIKE na condição de junção.
Digamos que você tenha duas tabelas, Tabela A e Tabela B, e queira juntá-las em uma condição em que a colunaA na Tabela A seja "like" colunaB na Tabela B. Isso significa que a correspondência pode incluir o valor completo na colunaB ou caracteres antes ou depois dela.
Usando INSTR:
Um método é usar a função INSTR() na condição de junção:
SELECT *
FROM TABLE A
JOIN TABLE B ON INSTR(B.columnB, A.columnA) > 0
Usando LIKE:
Outra opção é usar o operador LIKE com curingas:
SELECT *
FROM TABLE A
JOIN TABLE B ON B.columnB LIKE '%' A.columnA '%'
Usando LIKE com CONCAT:
Você também pode concatenar os símbolos curinga com a coluna valor usando a função CONCAT():
SELECT *
FROM TABLE A
JOIN TABLE B ON B.columnB LIKE CONCAT('%', A.columnA ,'%')
Conversão de maiúsculas:
Para garantir correspondências que não diferenciam maiúsculas de minúsculas, é recomendado converter os valores das colunas para letras maiúsculas antes de compará-los:
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
Considerações de eficiência:
A eficiência desses métodos pode variar dependendo do banco de dados específico e das estruturas da tabela. É aconselhável verificar a saída do plano EXPLAIN para determinar a abordagem mais ideal.
ANSI vs. JOINs não ANSI:
ANSI JOINs seguem sintaxe padronizada, enquanto não ANSI JOINs usam uma sintaxe mais tradicional. Neste caso, a cláusula JOIN é equivalente à cláusula WHERE em um JOIN não-ANSI:
SELECT *
FROM TABLE A,
TABLE B
WHERE INSTR(B.columnB, A.columnA) > 0
O uso de ANSI JOINs oferece a vantagem de separar a condição de junção da condição de filtro na cláusula WHERE.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3