sql >> Database >  >> RDS >> Mysql

MySQL-opdracht om in CSV (of vergelijkbare array) te zoeken

De juiste manier om dit in SQL af te handelen, is door een andere tabel toe te voegen voor een eigenschap met meerdere waarden. Het is tegen het relationele model om meerdere discrete waarden in één kolom op te slaan. Omdat het bedoeld is als een nee-nee, is er weinig ondersteuning voor in de SQL-taal.

De enige oplossing voor het vinden van een bepaalde waarde in een door komma's gescheiden lijst is het gebruik van reguliere expressies, die over het algemeen lelijk en traag zijn. Je hebt te maken met randgevallen, zoals wanneer een waarde al dan niet aan het begin of einde van de tekenreeks staat, evenals naast een komma.

SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';

Er zijn andere soorten query's die gemakkelijk zijn als je een genormaliseerde tabel hebt, maar moeilijk met de door komma's gescheiden lijst. Het voorbeeld dat u geeft, van het zoeken naar een waarde die gelijk is aan of groter is dan de zoekcriteria, is zo'n geval. Overweeg ook:

  • Hoe verwijder ik een element uit een door komma's gescheiden lijst?
  • Hoe zorg ik ervoor dat de lijst in gesorteerde volgorde staat?
  • Wat is het gemiddelde aantal kamers?
  • Hoe zorg ik ervoor dat de waarden in de lijst zelfs geldige vermeldingen zijn? bijv. wat weerhoudt me ervan om "1,2,banaan" in te voeren?

Als u geen tweede tabel wilt maken, bedenk dan een manier om uw gegevens met een enkele waarde weer te geven.

Om precies te zijn, zou ik moeten zeggen dat ik u aanraad om uw gegevens weer te geven met een enkele waarde per kolom , en de oplossing van Mike Atlas bereikt dat.



  1. Query voegt alles samen in één rij in plaats van in afzonderlijke rijen

  2. Oracle-datumcorruptie tijdens update

  3. If-voorwaarde gebruiken in waar-clausule

  4. Hoe kan ik de volledige definitie (sql) van systeemweergaven zoals user_objects krijgen?