Questo è un altro esempio dell'importanza di normalizzare i dati.
Mantenere più punti dati in una singola colonna non è quasi mai la progettazione corretta e con quasi mai intendo circa il 99,9999%.
Se non riesci a normalizzare il tuo database, puoi utilizzare una soluzione alternativa come questa:
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) +';%'
)
Non puoi usare il IN
operatore poiché si aspetta un elenco di valori delimitato da una virgola, mentre si tenta di fornirgli un unico valore delimitato da un punto e virgola. Anche se i valori in Project_ID fossero delimitati da una virgola, non funzionerebbe comunque.
Il motivo per cui ho aggiunto il ;
su ciascun lato del Project_ID
in entrambe le tabelle è così che il LIKE
l'operatore restituirà true
per qualsiasi posizione trova il Projects.Project_Id
all'interno del Feedback.Project_Id
. Devi aggiungere il ;
al Projects.Project_Id
per evitare il LIKE
per restituire true
quando stai cercando un numero che corrisponda parzialmente ai numeri nella stringa delimitata. Considera di cercare 12 in una stringa contenente 1;112;455 - senza aggiungere il delimitatore al valore di ricerca (12 in questo esempio) il LIKE
l'operatore restituirà true
.