sql >> Database >  >> RDS >> Mysql

Een door komma's gescheiden waarde zoeken

Korte termijn oplossing

Gebruik de FIND_IN_SET-functie :

WHERE FIND_IN_SET('Queensland', csv_column)

...omdat het gebruik van LIKE met jokertekens aan beide uiteinden riskant is, afhankelijk van hoeveel/weinig overeenkomsten (en het zorgt ook voor een tafelscan). De prestaties van LIKE met jokertekens aan weerszijden zijn vergelijkbaar met REGEXP - dat betekent slecht.

Lange termijn oplossing

Sla geen door komma's gescheiden waarden op -- gebruik een goede veel-op-veel-relatie met drie tabellen:

Dingen

  • thing_id (primaire sleutel)

Australische staten

  • State_id (primaire sleutel)
  • State_name

Things_to_Auz_States

  • thing_id (primaire sleutel, refererende sleutel naar THINGS tafel)
  • State_id (primaire sleutel, refererende sleutel naar AUSTRALIAN_STATES tafel)

Je hebt JOIN's nodig om gegevens uit de drie tabellen te halen, maar als je wilt weten hoeveel er zijn gekoppeld aan een bepaalde staat, of twee bepaalde staten, is dit het juiste model.



  1. Volgorde versus identiteit

  2. PostgreSQL verkeerde conversie van tijdstempel zonder tijdzone naar tijdstempel met tijdzone

  3. Krijg de grootte van een database in MariaDB

  4. Oracle-entiteit in VS-entiteitsframework werkt de primaire sleutel in code niet bij