To kolejny przykład znaczenia normalizacji danych.
Utrzymywanie wielu punktów danych w jednej kolumnie prawie nigdy nie jest prawidłowym projektem i prawie nigdy nie mam na myśli około 99,9999%.
Jeśli nie możesz znormalizować swojej bazy danych, możesz zastosować takie obejście:
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) +';%'
)
Nie możesz użyć IN operatora, ponieważ oczekuje listy wartości oddzielonych przecinkiem, podczas gdy ty próbujesz podać mu pojedynczą wartość oddzieloną średnikiem. Nawet jeśli wartości w Project_ID byłyby oddzielone przecinkami, to i tak nie zadziała.
Powód, dla którego dodałem ; po każdej stronie Project_ID w obu tabelach jest to, że w ten sposób LIKE operator zwróci true dla dowolnej lokalizacji znajduje Projects.Project_Id wewnątrz Feedback.Project_Id . Musisz dodać ; do Projects.Project_Id aby zapobiec LIKE aby zwrócić true gdy szukasz liczby, która jest częściowym dopasowaniem do liczb w rozdzielonym ciągu. Rozważ szukanie 12 w ciągu zawierającym 1;112;455 - bez dodawania ogranicznika do wartości wyszukiwania (12 w tym przykładzie) LIKE operator zwróci true .