Den korrekte måde at håndtere dette på i SQL er at tilføje endnu en tabel for en egenskab med flere værdier. Det er imod den relationelle model at gemme flere diskrete værdier i en enkelt kolonne. Da det er beregnet til at være et nej-nej, er der lidt understøttelse for det i SQL-sproget.
Den eneste løsning for at finde en given værdi i en kommasepareret liste er at bruge regulære udtryk, som generelt er grimme og langsomme. Du er nødt til at forholde dig til kanttilfælde, f.eks. når en værdi muligvis er i starten eller slutningen af strengen, såvel som ved siden af et komma.
SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';
Der er andre typer forespørgsler, der er nemme, når du har en normaliseret tabel, men svære med den kommaseparerede liste. Det eksempel, du giver, på at søge efter en værdi, der er lig med eller større end søgekriterierne, er et sådant tilfælde. Overvej også:
- Hvordan sletter jeg et element fra en kommasepareret liste?
- Hvordan sikrer jeg, at listen er i sorteret rækkefølge?
- Hvad er det gennemsnitlige antal værelser?
- Hvordan sikrer jeg, at værdierne på listen er gyldige poster? For eksempel. hvad forhindrer mig i at indtaste "1,2,banan"?
Hvis du ikke vil oprette en anden tabel, så kom med en måde at repræsentere dine data med en enkelt værdi.
Mere præcist vil jeg sige, at jeg anbefaler, at du repræsenterer dine data med en enkelt værdi pr. kolonne , og Mike Atlas' løsning opnår det.