Това е още един пример за важността на нормализирането на вашите данни.
Поддържането на множество точки от данни в една колона почти никога не е правилният дизайн и под почти никога имам предвид около 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
.