Dit is nog een ander voorbeeld van het belang van het normaliseren van uw gegevens.
Meerdere gegevenspunten in één kolom houden is bijna nooit het juiste ontwerp, en met bijna nooit bedoel ik ongeveer 99,9999%.
Als u uw database niet kunt normaliseren, kunt u een tijdelijke oplossing als deze gebruiken:
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) +';%'
)
U kunt de IN
. niet gebruiken operator omdat het een lijst met waarden verwacht die worden gescheiden door een komma, terwijl u probeert om het te voorzien van een enkele waarde die wordt gescheiden door een puntkomma. Zelfs als de waarden in Project_ID werden gescheiden door een komma, zou het nog steeds niet werken.
De reden dat ik de ;
. heb toegevoegd aan elke kant van de Project_ID
in beide tabellen is dat op deze manier de LIKE
operator retourneert true
voor elke locatie vindt het de Projects.Project_Id
binnen de Feedback.Project_Id
. U moet de ;
. toevoegen naar de Projects.Project_Id
om de LIKE
. te voorkomen om true
terug te geven wanneer u op zoek bent naar een getal dat gedeeltelijk overeenkomt met de getallen in de reeks met scheidingstekens. Overweeg om te zoeken naar 12 in een string die 1;112;455 bevat - zonder het scheidingsteken toe te voegen aan de zoekwaarde (12 in dit voorbeeld) de LIKE
operator retourneert true
.