sql >> Base de Datos >  >> RDS >> Sqlserver

Devolver filas donde el ID está en una cadena separada por punto y coma de la subconsulta MSSQL

Este es otro ejemplo más de la importancia de normalizar sus datos.
Mantener múltiples puntos de datos en una sola columna casi nunca es el diseño correcto, y casi nunca me refiero a alrededor del 99,9999%.

Si no puede normalizar su base de datos, puede usar una solución como esta:

SELECT * 
FROM Projects p
WHERE EXISTS (
    SELECT Project_ID 
    FROM Feedback F WHERE ID = 268 
    AND Project_ID IS NOT NULL
    AND ';'+ F.Project_ID +';' LIKE '%;'+ CAST(p.Project_ID as varchar) +';%'
)

No puedes usar el IN operador ya que está esperando una lista de valores delimitados por una coma, mientras intenta proporcionarle un único valor delimitado por un punto y coma. Incluso si los valores en Project_ID estuvieran delimitados por una coma, no funcionaría.

La razón por la que agregué ; a cada lado del Project_ID en ambas tablas es que así el LIKE el operador devolverá true para cualquier ubicación, encuentra el Projects.Project_Id dentro del Feedback.Project_Id . Debes agregar el ; al Projects.Project_Id para evitar el LIKE para devolver true cuando busca un número que coincida parcialmente con los números de la cadena delimitada. Considere buscar 12 en una cadena que contenga 1;112;455, sin agregar el delimitador al valor de búsqueda (12 en este ejemplo), el LIKE el operador devolvería true .