Prawidłowym sposobem obsługi tego w SQL jest dodanie kolejnej tabeli dla właściwości wielowartościowej. Przechowywanie wielu wartości dyskretnych w jednej kolumnie jest sprzeczne z modelem relacyjnym. Ponieważ ma być nie-nie, nie ma dla niego wsparcia w języku SQL.
Jedynym obejściem znalezienia danej wartości na liście oddzielonej przecinkami jest użycie wyrażeń regularnych, które są ogólnie brzydkie i powolne. Musisz radzić sobie z przypadkami brzegowymi, takimi jak kiedy wartość może, ale nie musi znajdować się na początku lub na końcu ciągu, a także obok przecinka.
SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';
Istnieją inne typy zapytań, które są łatwe, gdy masz znormalizowaną tabelę, ale trudne w przypadku listy rozdzielanej przecinkami. Podany przez Ciebie przykład wyszukiwania wartości równej lub większej od kryteriów wyszukiwania jest jednym z takich przypadków. Weź również pod uwagę:
- Jak usunąć jeden element z listy rozdzielanej przecinkami?
- Jak upewnić się, że lista jest posortowana?
- Jaka jest średnia liczba pokoi?
- Jak upewnić się, że wartości na liście są nawet prawidłowymi wpisami? Np. co ma uniemożliwić mi wpisanie „1,2,banan”?
Jeśli nie chcesz tworzyć drugiej tabeli, wymyśl sposób na przedstawienie danych za pomocą jednej wartości.
Mówiąc dokładniej, zalecam reprezentowanie danych za pomocą jednej wartości na kolumnę , a rozwiązanie Mike'a Atlasa to umożliwia.