sql >> Database teknologi >  >> RDS >> Sqlserver

Returner rækker, hvor ID er i semikolon adskilt streng fra underforespørgsel MSSQL

Dette er endnu et eksempel på vigtigheden af ​​at normalisere dine data.
At holde flere datapunkter i en enkelt kolonne er næsten aldrig det korrekte design, og med næsten aldrig mener jeg omkring 99,9999%.

Hvis du ikke kan normalisere din database, kan du bruge en løsning som denne:

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) +';%'
)

Du kan ikke bruge IN operatoren, da den forventer en liste over værdier afgrænset af et komma, mens du forsøger at forsyne den med en enkelt værdi, der er afgrænset af et semikolon. Selvom værdierne i Project_ID var afgrænset af et komma, ville det stadig ikke virke.

Grunden til at jeg har tilføjet ; på hver side af Project_ID i begge tabeller er det på denne måde LIKE operatør vil returnere true for enhver placering finder den Projects.Project_Id inde i Feedback.Project_Id . Du skal tilføje ; til Projects.Project_Id for at forhindre LIKE for at returnere true når du leder efter et tal, der er et delvist match til tallene i den afgrænsede streng. Overvej at kigge efter 12 i en streng, der indeholder 1;112;455 - uden at tilføje afgrænsningstegnet til søgeværdien (12 i dette eksempel) LIKE operatør ville returnere true .




  1. MySQL-underforespørgsel i ORDER BY-feltet. (uden indre led)

  2. UTF8-tegn vises ikke korrekt med datatabeller og yadcf

  3. FEJL! Serveren afsluttede uden at opdatere PID-fil (/usr/local/var/mysql/`brugernavn`.lan.pid)

  4. Hvordan importerer man sql-fil til databasen og ignorerer X-linjer i filen?