Ceci est encore un autre exemple de l'importance de normaliser vos données.
Conserver plusieurs points de données dans une seule colonne n'est presque jamais la bonne conception, et par presque jamais, je veux dire environ 99,9999 %.
Si vous ne pouvez pas normaliser votre base de données, vous pouvez utiliser une solution de contournement comme celle-ci :
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) +';%'
)
Vous ne pouvez pas utiliser le IN
puisqu'il attend une liste de valeurs délimitées par une virgule, alors que vous essayez de lui fournir une valeur unique délimitée par un point-virgule. Même si les valeurs de Project_ID étaient délimitées par une virgule, cela ne fonctionnerait toujours pas.
La raison pour laquelle j'ai ajouté le ;
de chaque côté du Project_ID
dans les deux tables est que de cette façon le LIKE
l'opérateur renverra true
pour n'importe quel emplacement, il trouve le Projects.Project_Id
dans le Feedback.Project_Id
. Vous devez ajouter le ;
au Projects.Project_Id
pour empêcher le LIKE
pour retourner true
lorsque vous recherchez un nombre correspondant partiellement aux nombres de la chaîne délimitée. Pensez à rechercher 12 dans une chaîne contenant 1;112;455 - sans ajouter le délimiteur à la valeur de recherche (12 dans cet exemple) le LIKE
l'opérateur renverrait true
.