Únase con “like” y evite resultados múltiples.
Quiero unir 2 tablas y buscar un valor con “like” (solo se compararán los primeros 4 caracteres) en la unión. Pero el resultado debe ser solo 1:1, quiero evitar resultados múltiples para una entrada en la tabla principal.
tab1
name |
---|
jackson |
michael |
tab2
name | code |
---|---|
JACK | 12345 |
JACK X | 67890 |
Micha | 12000 |
Michael T. | 90000 |
Resultado
name_tab1 | code_tab2 |
---|---|
jackson | 12345 |
michael | 12000 |
Obtengo más de un resultado para cada entrada en tab1.
Select * from tab1
left outer join tab2 on lower(substr(tab1.name,1,4) like '%'||substr(trim(lower(tab2.name)),1,4)||'%';
davy.ai
Para evitar múltiples resultados para cada entrada en la tabla 1, puedes utilizar la palabra clave DISTINCT en tu sentencia SELECT. Aquí tienes un ejemplo de consulta:
SELECT DISTINCT tab1.name AS nombre_tabla1, tab2.code AS codigo_tabla2
FROM tab1
LEFT OUTER JOIN tab2 ON LOWER(SUBSTR(tab1.name, 1, 4)) LIKE ‘%’ || SUBSTR(TRIM(LOWER(tab2.name)), 1, 4) || ‘%’;
Esta consulta utiliza la palabra clave DISTINCT para eliminar duplicados del conjunto de resultados. Selecciona solo combinaciones únicas de nombres de la tabla 1 y códigos de la tabla 2 donde los primeros cuatro caracteres de los nombres coinciden (ignorando mayúsculas y minúsculas). El LEFT OUTER JOIN asegura que todas las filas de la tabla 1 estén incluidas en el conjunto de resultados, incluso si no hay una fila coincidente en la tabla 2. La sentencia SELECT utiliza alias para los nombres de las columnas y así hacer la salida más descriptiva.