Resultados de coincidencia en tabla SQL donde no están en el mismo orden que la tabla unida.
Tengo dos tablas, ambas con una gran cantidad de datos. He tomado una fila de cada tabla para proporcionar este ejemplo.
Necesito hacer coincidir cualquier registro de usuario en la Tabla 1 con la Tabla 2 donde las especialidades coinciden.
No puedo usar una cláusula IN, porque mis resultados necesitan coincidir EXACTAMENTE lo que está en la columna ‘specialties’ de la tabla 1 con ‘specialties’ en la Tabla 2.
El problema es que en la Tabla 2, el orden de las especialidades no coincide con el de las especialidades en la Tabla 1.
Querría que el userID = 1 de la Tabla 1 coincida con esta fila en la Tabla 2 porque tienen las mismas especialidades. ¿Alguien tiene alguna idea de cómo puedo hacer que estos datos coincidan?
Tabla 1:
seleccionar
userID
,especialidades
de tabla1
donde userID = 1
userID | especialidades |
---|---|
1 | Agua y Medio Ambiente, Entorno Construido, Inundaciones y Riesgos Hidrológicos, Civil y Ambiental, Especialistas, Medio Ambiente |
Tabla 2:
especialidades |
---|
Entorno Construido, Agua y Medio Ambiente, Civil y Ambiental, Medio Ambiente, Especialistas, Inundaciones y Riesgos Hidrológicos |
davy.ai
Una posible solución para hacer coincidir las especialidades de la Tabla 1 con la Tabla 2 incluso si el orden es diferente consiste en utilizar la función STRING_SPLIT en SQL Server 2016. Aquí hay una consulta de ejemplo basada en los datos proporcionados:
Esta consulta creará una tabla temporal (
t2
) que contiene la lista ordenada de especialidades de la Tabla 2, utilizando la función STRING_SPLIT para dividir los valores separados por comas en filas y luego agregándolos de nuevo en una cadena con el mismo orden para cada grupo de especialidades. La sintaxisWITHIN GROUP (ORDER BY (SELECT NULL))
se utiliza para ordenar los valores alfabéticamente dentro de cada grupo (es decir, cada valor original deespecialidades
de la Tabla 2).Luego, la consulta principal unirá la Tabla 1 (
t1
) a esta tabla temporal (t2
) utilizando la columnaspecialties_sorted
como criterio de coincidencia. Esto se hace dividiendo la columnaspecialties
de la Tabla 1 de la misma manera y comparando su versión ordenada con la de la Tabla 2.Tenga en cuenta que esta consulta asume que no hay especialidades duplicadas dentro de cada fila de ambas tablas. Si ese no es el caso, es posible que necesite utilizar un método diferente para manejar los duplicados. Además, si la columna
specialties
puede contener comillas u otros caracteres especiales, es posible que deba escaparlos correctamente o utilizar un delimitador diferente para la agregación de cadenas.