Dette er endnu et eksempel på vigtigheden af at normalisere dine data.
At holde flere datapunkter i en enkelt kolonne er næsten aldrig det korrekte design, og med næsten aldrig mener jeg omkring 99,9999%.
Hvis du ikke kan normalisere din database, kan du bruge en løsning som denne:
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 ikke bruge IN
operatoren, da den forventer en liste over værdier afgrænset af et komma, mens du forsøger at forsyne den med en enkelt værdi, der er afgrænset af et semikolon. Selvom værdierne i Project_ID var afgrænset af et komma, ville det stadig ikke virke.
Grunden til at jeg har tilføjet ;
på hver side af Project_ID
i begge tabeller er det på denne måde LIKE
operatør vil returnere true
for enhver placering finder den Projects.Project_Id
inde i Feedback.Project_Id
. Du skal tilføje ;
til Projects.Project_Id
for at forhindre LIKE
for at returnere true
når du leder efter et tal, der er et delvist match til tallene i den afgrænsede streng. Overvej at kigge efter 12 i en streng, der indeholder 1;112;455 - uden at tilføje afgrænsningstegnet til søgeværdien (12 i dette eksempel) LIKE
operatør ville returnere true
.