SQLite Befehl bauen?

berndoa

Top Contributor
Hallo,
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)
 
Y

yfons123

Gast
wenn du gute indizes setzt und sinnvolle sql befehle absetzt dann soll es nicht an der performance hapern
weil du dann der db nichts dämliches aufbrumst und über die indizes kann die db gezielt suchen und dann geht das ganz flott

ein select * tut da schon im herzen weh
 

mihe7

Top Contributor
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.

Wenn ich Dich richtig verstehe, möchtest Du alle Zeilen löschen, für die es eine Zeile mit gleicher SixtupleId und einer bestimmten TripleId Z gibt, wenn sich die TripleIds unterscheiden.

SQL:
DELETE FROM Tuples toDelete 
 INNER JOIN Tuples other ON toDelete.SixtupleId = other.SixtupleId AND toDelete.TripleId <> other.TripleId 
      WHERE other.TripleId = ?

Bei solchen Abfragen empfielt es sich immer, den Ausführungsplan im Auge zu behalten (EXPLAIN), dabei sollten die Indizes möglichst effizient zum Einsatz kommen und je nach DBMS kann es auch sein, dass Du mit einer anderen Formulierung (z. B. mit NOT IN oder NOT EXISTS) einen besseren Plan erhältst.
 

berndoa

Top Contributor
Wenn ich Dich richtig verstehe, möchtest Du alle Zeilen löschen, für die es eine Zeile mit gleicher SixtupleId und einer bestimmten TripleId Z gibt, wenn sich die TripleIds unterscheiden.

SQL:
DELETE FROM Tuples toDelete
 INNER JOIN Tuples other ON toDelete.SixtupleId = other.SixtupleId AND toDelete.TripleId <> other.TripleId
      WHERE other.TripleId = ?

Bei solchen Abfragen empfielt es sich immer, den Ausführungsplan im Auge zu behalten (EXPLAIN), dabei sollten die Indizes möglichst effizient zum Einsatz kommen und je nach DBMS kann es auch sein, dass Du mit einer anderen Formulierung (z. B. mit NOT IN oder NOT EXISTS) einen besseren Plan erhältst.
Man stelle sich einen Graph sergestalt vor, dass links eine Menge Knoten ist (das sind die Sixtuples) und rehcts eine Menge Knoten (das sind die Triples).
Jeder Knoten links ist eingangs mit genau 20 Knoten rechts verbunden. (später können es natürlich weniger sein, minimal 1)
Und ich frage mich "Kann ich den ganz bestimmten Knoten XYZ auf der rechten Seite entfernen sodass trotzdem JEDER Knoten links mit mindestens einem Knoten rechts verbunden ist?"
meine Tabelle enthält, gerade in jeder Zeile eine solche Verbindung/Kante.
Und ich will einfahc gucken, wenn man sich so vorstellt, der Knoten XYZ und alle damit einhergehenden Verbindungen wären weg, sind dann trotzdem naoch für jeder Knoten links (aka für jedes Sixtuple) noch verbindungen dahin da?

Kurzum, kann ich alle Zeilen in denen das Tripel XYZ vorkommt, löschen, und es gibt trotzdem noch für jede Sixtuple eine Zeile wo es vorkommt?

Super minimalistisches Beispiel:

Sagen wir es gäbe nur die Sixtuple 1,2,3 und die Tripel 1,2,3.
W#ren nun die verbleibenden Verbindungen
(1,1)
(1,3)
(2,1)
(2,3)
(3,1)
(3,2)
(3,3)

Kann das Tripel 1 entfernt werden?
Ja, denn auch wenn alle Verbindungen weg sind, auf deren rechter Seite ne 1 steht, so haben wir
(1,3)
(2,3)
(3,2)
(3,3)
ir sehen, alle sixtuple 1,2,3 kommen auf der linken seite immer noch mind. einmal vor.

Können wir nun das tripel 3 entfernen?
nein, denn dann hätten wir
(3,2)
und die sixtuple 1 und 2 haben keienrlei zeilen mehr/kommen in keiner zeile mehr vor.

Einen Schritt zurück, von
(1,3)
(2,3)
(3,2)
(3,3)
aus, können wir allerdings durch das Tripel 2 entfernen.
Denn dann haben wir
(1,3)
(2,3)
(3,3)
alle sixtuple 1-3 werden immer noch erreicht.

Wir sind nun auch am Ende.
Denn das einzige noch benutzte tripel 3 kann nicht mehr entfernt werden aus offensichtlichen Gründen.

So in etwa ist bei mir auch der hintergedanke beim vorgehen,
nur dass die sixtupleids von 0-13 millionen gehenund die tripleids nicht zwingend aufsteigende natürliche zahlen sind (konkret habe ich die tripleid einfahc definiert als konkatenation der 3 zahlen und das wieder in int konvetiert. a la 12+23+27=122327)
 

mihe7

Top Contributor
Naja, dann fragst Du halt nach der Anzahl verschiedener Sixtupl:e, die nach dem Löschen verbleiben würden:
SQL:
SELECT count(DISTINCT SixtupleId) FROM Tupel WHERE TripleId <> ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T SQLite Alternativen zu SQlite, dateibasiert, leicht verschlüsselbar, Nutzerverwaltung Datenbankprogrammierung 21
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
Maxim6394 JPA 3.2 & SQLite - LocalDateTime wird falsch geladen Datenbankprogrammierung 1
Maxim6394 EclipseLink + SQLite | Unable to acquire a connection from driver [null] Datenbankprogrammierung 6
J SQLite Abfrage fehlerhaft - komme nicht weiter - please help. Datenbankprogrammierung 3
thor_norsk SQLite Fehlermeldung Datenbankprogrammierung 4
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D SQLite Collections oder Arrays in SQLite abbilden Datenbankprogrammierung 7
N ORM für Sqlite Datenbankprogrammierung 4
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
N SQLite Datenbankprogrammierung 2
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
X Sqlite Fks Datenbankprogrammierung 4
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
X SQLite SQLite Programm beendet/führt nicht weiter aus Datenbankprogrammierung 12
Sam96 SQLite mit JavaFX Datenbankprogrammierung 1
T sqlite select Datenbankprogrammierung 12
V SQLite Performance: 1 Datei mit einzelnen Einträgen gegenüber SQLite Datenbankprogrammierung 7
F Java SQLite Error Datenbankprogrammierung 19
F Sqlite cannot commit Datenbankprogrammierung 2
H SQLite Sqlite Datenbank direkt einbinden. Datenbankprogrammierung 5
U Dom Parser und SQLite füllen Datenbankprogrammierung 5
D SQLite Datenkbank auf WebServer möglich? Datenbankprogrammierung 4
M Datenbankausgabe .jsp per SQLite Datenbankprogrammierung 7
J SQLite Login Datenbank Datenbankprogrammierung 2
M SQLite Einstieg mit SQLite, wohin mit der DLL? Datenbankprogrammierung 7
M SQLite Speicherpfad Datenbankprogrammierung 0
G SQLite SQLite Select für View vereinfachen/optimieren Datenbankprogrammierung 4
G sqlite innerjoin Datenbankprogrammierung 5
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
R sqlite UPDATE wirkt nicht aus Java Datenbankprogrammierung 7
G SQLite SQLite Abfrage Datenbankprogrammierung 4
F SQLite-Extensions unter Java Datenbankprogrammierung 2
H SQLite mit DefaultTableModel synchronisieren Datenbankprogrammierung 5
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
L SQLite fügt nur den ersten Datensatz ein Datenbankprogrammierung 2
S SQLite Ausführbares Jar mit SQLite DB Datenbankprogrammierung 4
F [SQLite] Mehrere Datensätze einfügen Datenbankprogrammierung 12
H SQLite Datenkbank erstellen Datenbankprogrammierung 3
S Abfrage auf SQLite-DB Datenbankprogrammierung 2
Kasoki SQLite SQLite oder doch XML!? Datenbankprogrammierung 2
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
G SQLJet (SQLite) - Mehrbenutzerzugriff auf Datenbank handhaben Datenbankprogrammierung 1
S SQLite in JAR Datenbankprogrammierung 8
J SQLite --> Java SDK Datenbankprogrammierung 7
P Datenbank für Java Anwendung wie SQLite ohne Installation Datenbankprogrammierung 4
P Sqlite API für JAVA ? Datenbankprogrammierung 9
feuervogel SQLite unter Linux mit Eclipse einrichten Datenbankprogrammierung 8
K SQLite Datenbankprogrammierung 5
S SQLite oder RDBMS als Datei(nicht Client/Server) Datenbankprogrammierung 5
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
M Update Befehl Datenbankprogrammierung 1
M Finde einen eifachen Befehl nicht Datenbankprogrammierung 4
M MySQL Befehl formatieren in MySQL Datenbankprogrammierung 4
E Datentyp enum und tinytext in sql-Befehl Datenbankprogrammierung 5
E falscher Befehl executeQuery() issue data Datenbankprogrammierung 12
S SQL Befehl: "suchwort" egal wo Datenbankprogrammierung 4
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
A Oracle Update Befehl in Datenbank anhand einer Schleife Datenbankprogrammierung 8
GianaSisters SQL Befehl für allgemeine Datenbankexistenz Datenbankprogrammierung 4
S Write Befehl Datenbankprogrammierung 10
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
S MySQL sql befehl in java klappt nicht Datenbankprogrammierung 3
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
A Count(*)-Befehl Datenbankprogrammierung 3
G Update-Befehl Fehlerhaft ?? Datenbankprogrammierung 2
G Update Befehl funkt nicht. WARUM? Datenbankprogrammierung 5
I Sql Befehl wird nicht ausgeführt Datenbankprogrammierung 8
A Problem mit einem Select-Befehl Datenbankprogrammierung 5
B [SQL] UPDATE oder REPLACE INTO Befehl Datenbankprogrammierung 10
B fehler bei select befehl Datenbankprogrammierung 5
T INSERT-Befehl in Java für Oracle Datenbankprogrammierung 4
B MySQL Befehl ausführen Datenbankprogrammierung 3
D Delete Befehl will irgendwie nicht Datenbankprogrammierung 8
M insert befehl funzt nicht!wo ist der fehler? Datenbankprogrammierung 5
G textfeld eingabe nicht in den SQL befehl einbinden Datenbankprogrammierung 14
S Denkfehler bei SQL-Befehl Datenbankprogrammierung 8
E Variablem in insert - Befehl Datenbankprogrammierung 3
J Warten bis SQL befehl ausgeführt wurde! Datenbankprogrammierung 4
S INSERT Befehl mit MySQL? Datenbankprogrammierung 7
C Problem mit Treiber? insert into Befehl geht nicht Datenbankprogrammierung 5
R Befehl für mysqldump Datenbankprogrammierung 18
N Insert-Befehl und JTextfield Datenbankprogrammierung 6
F suche MySQl-Befehl um Datensatz an Tabellenende zu schreiben Datenbankprogrammierung 2
E Wie kann ich aus diesem XML eine XMLTABLE-Funktion bauen? Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben