Det här är ännu ett exempel på vikten av att normalisera dina data.
Att hålla flera datapunkter i en enda kolumn är nästan aldrig den korrekta designen, och med nästan aldrig menar jag ungefär 99,9999%.
Om du inte kan normalisera din databas kan du använda en lösning så här:
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) +';%'
)
Du kan inte använda IN
operatorn eftersom den förväntar sig en lista med värden avgränsade med kommatecken, medan du försöker förse den med ett enda värde som är avgränsat med semikolon. Även om värdena i Project_ID var avgränsade med kommatecken skulle det fortfarande inte fungera.
Anledningen till att jag har lagt till ;
på varje sida av Project_ID
i båda tabellerna är det på detta sätt LIKE
operatören returnerar true
för vilken plats som helst hittar den Projects.Project_Id
inuti Feedback.Project_Id
. Du måste lägga till ;
till Projects.Project_Id
för att förhindra LIKE
för att returnera true
när du letar efter ett nummer som delvis matchar siffrorna i den avgränsade strängen. Överväg att leta efter 12 i en sträng som innehåller 1;112;455 - utan att lägga till avgränsaren till sökvärdet (12 i det här exemplet) LIKE
operatören skulle returnera true
.