Toto je další příklad důležitosti normalizace dat.
Uchování více datových bodů v jednom sloupci není téměř nikdy správný návrh a téměř nikdy tím myslím asi 99,9999 %.
Pokud nemůžete normalizovat databázi, můžete použít toto řešení:
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) +';%'
)
Nemůžete použít IN
operátor, protože očekává seznam hodnot oddělený čárkou, zatímco se mu pokusíte dodat jedinou hodnotu, která je oddělena středníkem. I kdyby byly hodnoty v Project_ID odděleny čárkou, stále by to nefungovalo.
Důvod, proč jsem přidal ;
na každé straně Project_ID
v obou tabulkách je tímto způsobem LIKE
operátor vrátí true
pro jakékoli umístění najde Projects.Project_Id
uvnitř Feedback.Project_Id
. Musíte přidat ;
na Projects.Project_Id
abyste zabránili LIKE
vrátíte true
když hledáte číslo, které se částečně shoduje s čísly v řetězci s oddělovači. Zvažte hledání 12 v řetězci obsahujícím 1;112;455 – bez přidání oddělovače k hledané hodnotě (12 v tomto příkladu) LIKE
operátor vrátí true
.