Това е още един пример за важността на нормализирането на вашите данни.
Поддържането на множество точки от данни в една колона почти никога не е правилният дизайн и под почти никога имам предвид около 99,9999%.
Ако не можете да нормализирате вашата база данни, можете да използвате заобиколно решение като това:
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) +';%'
)
Не можете да използвате IN тъй като очаква списък със стойности, разделени със запетая, докато вие се опитвате да му предоставите една стойност, която е разделена с точка и запетая. Дори ако стойностите в Project_ID бяха разделени със запетая, пак нямаше да работи.
Причината, поради която добавих ; от всяка страна на Project_ID и в двете таблици е, че по този начин LIKE операторът ще върне true за всяко местоположение намира Projects.Project_Id вътре в Feedback.Project_Id . Трябва да добавите ; към Projects.Project_Id за да предотвратите LIKE за връщане на true когато търсите число, което е частично съвпадение с числата в разделения низ. Помислете за търсене на 12 в низ, съдържащ 1;112;455 - без добавяне на разделител към стойността за търсене (12 в този пример) LIKE операторът ще върне true .