Hallo,
ich habe eine Datenbank mit einer Tabelle, die wie folgt gebaut wurde:
Die 2 wirklich relevanten Spalten sind SixtupleId und TripleId, die anderen Beiden sind nur zu Kontrollzwecken da und sind im Prinzip überflüssig.
Nun will ich im Rahmen eines Java Programms, das über den jdbc server blabla an der Datenbank rumwerkelt, 2 Sachen machen:
Sache ist, die SixtupleIds sind einfach Zahlen von 0-ca. 13Millionen.
Nun will ich Folgendes:
Vorgegeben vom Java Programm sei eine bestimmte Zahl Z.
Es ist sicher (vor Abarbeiten nachfolgender Schritte) dass diverse zeilen vorkommen, in denen diese Zahl als TripleId vorkommt.
Nun soll
1. die Datenbank dahingehend durchsucht werden ob es für jede mögliche SixtupleId (wie gesagt, Zahlen 0-13 Millionen) eine Zeile gibt, in der ein TripleId ungleich Z vorkommt.
Kurzum, ob für jede SixtupleId mindestens ein Paar (SixtupleId,TripleId) vorkommt, wo die TripelId nicht Z ist.
2.Falls obiges mit true beantwortet wurde, dann sollen alle Zeilen entfernt werden in denen TripleId=Z ist.
Diesen Befehl kriege ich vermutlich recht easy hin.
Nur das 1. bin ich mir unsicher wie ich das recht effizient hinkriege.
Oder müsste ich da in guter alter Java Manier eine For schleife über die Zahlen 0-13Mille machen, mittels (wenn i die for schleifen Variable ist)
jeweils ResultSet generieren, irgendwie gucken ob die Alle nicht-leer sind
und so das bestimmen?
Mein Problem ist halt dass mein Datensatz aus ca. 260 Milliraden Zeilen besteht.
Da wäre eine möglichst effiziente Variante recht gut, gerade auch weil ich dieses Vorgehen für viele Zahlen Z durchführen werde (maximal 18000 solcher Zahlen Z, um genau zu sein)
ich habe eine Datenbank mit einer Tabelle, die wie folgt gebaut wurde:
SQL:
CREATE TABLE Tuples (
Sixtuple STRING NOT NULL,
SixtupleId INTEGER NOT NULL,
Triple STRING NOT NULL,
TripleId INTEGER NOT NULL,
PRIMARY KEY (
SixtupleID,
TripleID
)
);
Die 2 wirklich relevanten Spalten sind SixtupleId und TripleId, die anderen Beiden sind nur zu Kontrollzwecken da und sind im Prinzip überflüssig.
Nun will ich im Rahmen eines Java Programms, das über den jdbc server blabla an der Datenbank rumwerkelt, 2 Sachen machen:
Sache ist, die SixtupleIds sind einfach Zahlen von 0-ca. 13Millionen.
Nun will ich Folgendes:
Vorgegeben vom Java Programm sei eine bestimmte Zahl Z.
Es ist sicher (vor Abarbeiten nachfolgender Schritte) dass diverse zeilen vorkommen, in denen diese Zahl als TripleId vorkommt.
Nun soll
1. die Datenbank dahingehend durchsucht werden ob es für jede mögliche SixtupleId (wie gesagt, Zahlen 0-13 Millionen) eine Zeile gibt, in der ein TripleId ungleich Z vorkommt.
Kurzum, ob für jede SixtupleId mindestens ein Paar (SixtupleId,TripleId) vorkommt, wo die TripelId nicht Z ist.
2.Falls obiges mit true beantwortet wurde, dann sollen alle Zeilen entfernt werden in denen TripleId=Z ist.
Diesen Befehl kriege ich vermutlich recht easy hin.
Nur das 1. bin ich mir unsicher wie ich das recht effizient hinkriege.
Oder müsste ich da in guter alter Java Manier eine For schleife über die Zahlen 0-13Mille machen, mittels (wenn i die for schleifen Variable ist)
SQL:
SELECT *
FROM Tupels
WHERE SixtupleID=i AND TripleId!=Z
jeweils ResultSet generieren, irgendwie gucken ob die Alle nicht-leer sind
und so das bestimmen?
Mein Problem ist halt dass mein Datensatz aus ca. 260 Milliraden Zeilen besteht.
Da wäre eine möglichst effiziente Variante recht gut, gerade auch weil ich dieses Vorgehen für viele Zahlen Z durchführen werde (maximal 18000 solcher Zahlen Z, um genau zu sein)