sql >> Database teknologi >  >> RDS >> Oracle

Er det muligt at forespørge i en kommasepareret kolonne for en bestemt værdi?

Det kan du ved at bruge LIKE. Du ønsker ikke at matche for delvise værdier, så du bliver nødt til at inkludere kommaerne i din søgning. Det betyder også, at du skal angive et ekstra komma for at søge efter værdier i begyndelsen eller slutningen af ​​din tekst:

select 
  * 
from
  YourTable 
where 
  ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'

Men denne forespørgsel vil være langsom, ligesom alle forespørgsler, der bruger LIKE, især med et ledende jokertegn.

Og der er altid en risiko. Hvis der er mellemrum omkring værdierne, eller værdier kan indeholde kommaer i sig selv, i hvilket tilfælde de er omgivet af anførselstegn (som i csv-filer), vil denne forespørgsel ikke fungere, og du bliver nødt til at tilføje endnu mere logik, hvilket bremser din forespørgsel endnu mere.

En bedre løsning ville være at tilføje en underordnet tabel for disse kategorier. Eller rettere endda en separat tabel for kategorierne og en tabel, der krydslinker dem til YourTable.



  1. Hvordan kan jeg løse inkompatibel med sql_mode=only_full_group_by i laravel veltalende?

  2. JSON_ARRAYAGG() – Opret et JSON-array fra rækkerne af en forespørgsel i MySQL

  3. Sådan ændres datatypen i Oracle med eksisterende rækker i tabellen

  4. Wordnet sqlite synonymer og prøver