Oracle - % Operator umgehen

kjh54tergkjjj

Benutzer
Beiträge
8
Hallo,

wie kann ich eine Division (%) in Oracle umgehen?

Ich hab gelesen, dass es mit dem kartesisches Produkt und einem (doppelten) Minus klappen sollte.

Ich hab zwei Relationen (a, b) und möchte a%b darauf ausführen.
Hat dazu bitte jemand ein Beispiel - wie sieht das in der Praxis aus?

Beispiel:

a (A)
a1
a2
a3

b (A B)
a1 b1
a2 b1
a1 b2
a3 b3

Ziel: b/a

Vielen Dank!
 
Zuletzt bearbeitet:
Werbung:
Beispiel:

CREATE TABLE r (A varchar(20), B varchar(20));
CREATE TABLE s (A varchar(20));

INSERT INTO `r` (`A`,`B`) values ('a1','b1');
INSERT INTO `r` (`A`,`B`) values ('a2','b1');
INSERT INTO `r` (`A`,`B`) values ('a3','b1');
INSERT INTO `r` (`A`,`B`) values ('a1','b2');
INSERT INTO `r` (`A`,`B`) values ('a2','b2');
INSERT INTO `r` (`A`,`B`) values ('a1','b3');
INSERT INTO `r` (`A`,`B`) values ('a2','b3');
INSERT INTO `r` (`A`,`B`) values ('a3','b3');
INSERT INTO `r` (`A`,`B`) values ('a4','b3');
INSERT INTO `r` (`A`,`B`) values ('a2','b4');

INSERT INTO `s` (`A`) values ('a1');
INSERT INTO `s` (`A`) values ('a2');
INSERT INTO `s` (`A`) values ('a3');

Bei r / s sollte dann rauskommen b1 und b3

Also all jene Tupel aus r, welche in jeder Kombination mit den Tupoels aus s in r vorkommen.

In Mysql funktioniert DIV wohl auch nur mit integer und nicht auf varchar.

Auf jeden Fall möchte ich diese Division anders lösen und zwar mit dem kartesischen Produkt (also eventuell einen Cross Join und dann einem doppelten Minus ==> (r join s) MINUS r oder so ähnlich
 
Werbung:
ich würde es in PostgreSQL so lösen:

Code:
test=# select * from r;
 a  | b  
----+----
 a1 | b1
 a2 | b1
 a3 | b1
 a1 | b2
 a2 | b2
 a1 | b3
 a2 | b3
 a3 | b3
 a4 | b3
 a2 | b4
(10 Zeilen)

test=# select * from s;
 a  
----
 a1
 a2
 a3
(3 Zeilen)

test=# select b, array_agg(a) from r group by b having array_agg(a) @> (select array_agg(a) from s);
 b  |  array_agg   
----+---------------
 b1 | {a1,a2,a3}
 b3 | {a1,a2,a3,a4}
(2 Zeilen)

Andreas
 
Zurück
Oben