sql >> Database >  >> RDS >> Mysql

SQL voeg dubbele rijen samen en voeg waarden samen die anders zijn

Slechte gewoonte om door komma's gescheiden lijsten te gebruiken. U kunt documentatie lezen over databasenormalisatie.

Door komma's gescheiden lijsten hebben veel praktische problemen :

  • Kan niet garanderen dat elke waarde van het juiste gegevenstype is:1,2,3,banaan,5 kan niet worden voorkomen
  • Kan geen externe-sleutelbeperkingen gebruiken om waarden aan een opzoektabel te koppelen; geen manier om referentiële integriteit af te dwingen.
  • Kan uniciteit niet afdwingen:1,2,3,3,3,5 kan niet worden voorkomen
  • Kan geen waarde uit de lijst verwijderen zonder de hele lijst op te halen.
  • Kan een lijst niet langer opslaan dan in de stringkolom past.
  • Moeilijk om te zoeken naar alle entiteiten met een bepaalde waarde in de lijst; je moet een inefficiënte table-scan gebruiken. Moet mogelijk zijn toevlucht nemen tot reguliere expressies, bijvoorbeeld in MySQL:idlist REGEXP '[[:<:]]2[[:>:]]'
  • Moeilijk om elementen in de lijst te tellen, of andere geaggregeerde zoekopdrachten uit te voeren.
  • Moeilijk om de waarden samen te voegen met de opzoektabel waarnaar ze verwijzen.
  • Moeilijk om de lijst in gesorteerde volgorde op te halen.
  • Het opslaan van gehele getallen als strings kost ongeveer twee keer zoveel ruimte als het opslaan van binaire gehele getallen. Om nog maar te zwijgen over de ruimte die de kommatekens innemen.

Maar als je het in elk geval nodig hebt, zou je zoiets kunnen gebruiken:

SELECT  FilmID,
        FilmName, 
        Id = REPLACE(
                (
                SELECT DateShown AS [data()]
                FROM YourTable
                WHERE FilmID = a.FilmID
                ORDER BY FilmName FOR XML PATH('')), ' ', ','
                )
FROM    YourTable a
WHERE   FilmName IS NOT NULL
GROUP BY FilmID, FilmName

Meer over Door komma's gescheiden lijsten




  1. Veroorzaakt door:java.time.DateTimeException:Conflict gevonden:veld DayOfWeek 6 verschilt van DayOfWeek 2 afgeleid van 30-01-2016

  2. Filter django-query op unicode-tekens 🐲 of 💎 etc

  3. Hoe maak je een SQL-zoekopdracht krachtiger?

  4. Hoe kan ik mijn standaarddatabase in SQL Server wijzigen zonder MS SQL Server Management Studio te gebruiken?