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 .