sql >> Database >  >> RDS >> Oracle

Hoe te vinden of een waarde bestaat binnen een VARRAY

U moet de geneste tabel in de FROM-component blootleggen met behulp van de table() functie. U kunt dan verwijzen naar attributen van de collectie:

SQL> select g.title
  2  from game_table g
  3       , table(g.gametheme) gt
  4  where gt.theme = 'Action';

TITLE
--------------------------------------------------
Star Wars

SQL> 

"wat als ik dan rijen met meerdere thema's moet ophalen, bijv. Actie, FPS?"

Excuses voor de onhandige oplossing, maar ik moet nu aan het werk. Misschien post ik later een elegantere oplossing.

SQL> select * from game_table
  2  /

TITLE
--------------------------------------------------
GAMETHEME(THEME)
--------------------------------------------------------------------------------
Star Wars
THEME_TYPE(THEME_GAME('Action'), THEME_GAME('FPS'))

Uncharted 3
THEME_TYPE(THEME_GAME('Action'), THEME_GAME('Puzzle'))

Commander Cody
THEME_TYPE(THEME_GAME('Fun'), THEME_GAME('Puzzle'))


SQL> select g.title
  2  from game_table g
  3       , table(g.gametheme) gt
  4       , table(g.gametheme) gt1
  5  where gt.theme = 'Action'
  6  and gt1.theme = 'FPS' ;

TITLE
--------------------------------------------------
Star Wars

SQL> 

Deze alternatieve aanpak werkt niet met uw huidige type omdat VARRAY member of . niet ondersteunt . Maar het zou werken als de verzameling een geneste tafel was.

 select g.title
  from game_table g
  where  'Action' member of g.gametheme
  and 'FPS' member of g.gametheme


  1. MySQL Selecteer alle kolommen uit de ene tabel en enkele uit een andere tabel

  2. MySQL CAST versus CONVERT

  3. Hoe kan ik null-waarden opnemen in een MIN of MAX?

  4. Wat is de meest aanbevolen manier om tijd op te slaan in PostgreSQL met Java?