sql >> Databáze >  >> RDS >> Mysql

Příkaz MySQL pro vyhledávání CSV (nebo podobného pole)

Správný způsob, jak to zvládnout v SQL, je přidat další tabulku pro vlastnost s více hodnotami. Ukládání více diskrétních hodnot do jednoho sloupce je proti relačnímu modelu. Vzhledem k tomu, že je zamýšleno jako ne-ne, je pro něj v jazyce SQL jen malá podpora.

Jediným řešením pro nalezení dané hodnoty v seznamu odděleném čárkami je použití regulárních výrazů, které jsou obecně ošklivé a pomalé. Musíte se vypořádat s okrajovými případy, jako když hodnota může nebo nemusí být na začátku nebo na konci řetězce a také vedle čárky.

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

Existují i ​​jiné typy dotazů, které jsou jednoduché, když máte normalizovanou tabulku, ale těžké se seznamem odděleným čárkami. Příklad, který uvádíte, hledání hodnoty, která je stejná nebo větší než vyhledávací kritéria, je jedním z takových případů. Zvažte také:

  • Jak smažu jeden prvek ze seznamu odděleného čárkami?
  • Jak zajistím, aby byl seznam seřazený?
  • Jaký je průměrný počet pokojů?
  • Jak zajistím, že hodnoty v seznamu jsou platné? Např. co mi brání v zadání „1,2,banana“?

Pokud nechcete vytvářet druhou tabulku, vymyslete způsob, jak svá data reprezentovat jedinou hodnotou.

Přesněji bych měl říci, že doporučuji, abyste svá data reprezentovali jedinou hodnotou na sloupec a řešení Mika Atlase toho dosahuje.



  1. Použití příkazu IN pro parametr SQL uložené procedury

  2. Spouštění Vites a MySQL pomocí ClusterControl

  3. Dokončení SQL. Příběhy úspěchu a neúspěchu

  4. Jak aplikovat funkci na každý prvek sloupce pole v Postgresu?