"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como realizar uma junção LIKE no SQL: INSTR, LIKE ou CONCAT?

Como realizar uma junção LIKE no SQL: INSTR, LIKE ou CONCAT?

Publicado em 2024-11-04
Navegar:817

How to Perform a LIKE Join in SQL: INSTR, LIKE, or CONCAT?

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.

Tutorial mais recente Mais>

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