sql >> Database >  >> RDS >> Sqlserver

Retourneert rijen waarbij ID in een puntkomma gescheiden tekenreeks is van subquery MSSQL

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 .




  1. Een variabele declareren en weergeven in Oracle

  2. mysql GEBRUIKER MAKEN

  3. Hiërarchische query in MySQL. (verbind door equivalent voor MySQL)

  4. Kan datum niet opslaan in database in php