Wenn Sie eine Sammlung verwenden, anstatt ein VARRAY
dann sind Sie nicht auf die Anzahl der Themen beschränkt können Sie speichern und Sie können den MULTISET INTERSECT [ALL|DISTINCT]
Operator und die CARDINALITY
Funktion:
SQL Fiddle
Oracle 11g R2 Schema Einrichtung:
CREATE OR REPLACE TYPE Varchar20List AS TABLE OF VARCHAR2(20)
/
CREATE OR REPLACE TYPE Game_Type AS OBJECT(
Title VARCHAR2(50),
GameTheme Varchar20List
)
/
CREATE TABLE Game_Table of Game_Type
NESTED TABLE GameTheme STORE AS GameTheme_tab
/
INSERT INTO Game_Table
VALUES('Game A' , Varchar20List('Action', 'FPS'))
/
INSERT INTO Game_Table
VALUES('Game B' , Varchar20List('Action', 'FPS', 'P2W'))
/
INSERT INTO Game_Table
VALUES('Game C' , Varchar20List('FPS', 'P2W'))
/
Abfrage 1:
SELECT *
FROM game_table a
INNER JOIN
game_table b
ON (
a.title < b.title
AND
CARDINALITY(a.GameTheme MULTISET INTERSECT b.GameTheme) > 1
)
Results:
| TITLE | GAMETHEME | TITLE | GAMETHEME |
|--------|----------------|--------|----------------|
| Game A | Action,FPS | Game B | Action,FPS,P2W |
| Game B | Action,FPS,P2W | Game C | FPS,P2W |
Wenn Sie es mit VARRAY
s tun wollen, dann:
SQL Fiddle
Oracle 11g R2 Schema Setup:
CREATE OR REPLACE TYPE Varchar20List AS VARRAY(3) OF VARCHAR2(20)
/
CREATE OR REPLACE TYPE Game_Type AS OBJECT(
Title VARCHAR2(50),
GameTheme Varchar20List
)
/
CREATE TABLE Game_Table of Game_Type
--NESTED TABLE GameTheme STORE AS GameTheme_tab
/
INSERT INTO Game_Table
VALUES('Game A' , Varchar20List('Action', 'FPS'))
/
INSERT INTO Game_Table
VALUES('Game B' , Varchar20List('Action', 'FPS', 'P2W'))
/
INSERT INTO Game_Table
VALUES('Game C' , Varchar20List('FPS', 'P2W'))
/
Abfrage 1:
SELECT *
FROM game_table a
INNER JOIN
game_table b
ON (
a.title < b.title
AND
2 <= (SELECT COUNT(*)
FROM TABLE(a.GameTheme) ag
INNER JOIN TABLE(b.GameTheme) bg
ON (ag.COLUMN_VALUE = bg.COLUMN_VALUE))
)
Results:
| TITLE | GAMETHEME | TITLE | GAMETHEME |
|--------|----------------|--------|----------------|
| Game A | Action,FPS | Game B | Action,FPS,P2W |
| Game B | Action,FPS,P2W | Game C | FPS,P2W |