Denkfehler bei SQL-Befehl

Status
Nicht offen für weitere Antworten.

SamHotte

Top Contributor
Moin,

ich hab ein Denkproblem für meinen Datenbankzugriff, vielleicht kann ja einer helfen.

Ich habe zwei Relationen, die ich über eine dritte miteinander verknüpfen möchte (n:m-Beziehung). Die Schemata sehen vom Prinzip her so aus (die Feldnamen sind anders, aber das ist ja hier egal):

EINS(nummer_eins, zeitstempel, ...)
ZWEI(nummer_zwei, ...)
REL(nummer_eins, zeitstempel, nummer_zwei)

Relation ZWEI repräsentiert einen Baum, EINS eine Liste. Die Verknüpfungen sind aufgrund von Programmierfehlern teilweise mit, teilweise ohne den Wurzelknoten gespeichert (nummer_zwei hat den Wert 1 für Wurzel). Nun suche ich eine Möglichkeit, dort, wo genau diese Verknüpfung fehlt, diese nachzutragen, aber nur dort, wo sonst Verknüpfungen existieren.

Mein Versuch war, dies über "SELECT DISTINCT nummer_eins, zeitstempel, nummer_zwei WHERE nummer_zwei <> 1" zu machen - ich nahm an, dass ich dann je einen Datensatz für diejenigen Verknüpfungen bekomme, wo die Wurzel fehlt. Das scheint aber nicht zu stimmen, die Versuche, eine Wurzelverknüpfung hinzuzufügen, scheitern.

Hat jemand eine andere Idee, wie man das hinbekommen könnte?
 

Ilja

Bekanntes Mitglied
ich rall nix... ein ausschnitt der daten (von mir aus verfremdet) und deine konkrete SELECT-Anweisung wären hilfreich ;)
 

SamHotte

Top Contributor
Beispieldatensätze:

Tabelle EINS:
1, 17:39, "Spieltag 1"
1, 17:44, "Spieltag 1"
1, 17:57, "Spieltag 1"
2, 17:40, "Spieltag 2"
3, 18:30, "Spieltag 3"

Tabelle ZWEI:
1, "Mannschaften"
2, "Bayern München"
3, "Werder Bremen"
4, "Hamburger SV"
5, "Makaay"
6, "Klose"
7, "van Boyten"

Tabelle REL:
1, 17:39, 1
1, 17:44, 1
1, 17:44, 2
1, 17:44, 3
3, 18:30, 1
3, 18:30, 2

Semantik:
Tabelle EINS hält unterschiedliche Versionen von Tabellenständen (jeweils die mit dem spätesten Zeitstempel ist die aktuelle). Der Primärschlüssel besteht aus den beiden Feldern "nummer_eins" und "zeitstempel".
Tabelle ZWEI hält den Baum, in dem bspw. die Spieler enthalten sind.
Jeder aktive Tabellenstand kann jetzt mit den einzelnen Einträgen aus dem Baum verknüpft werden (z.B. Torschützen oder eingesetzte Spieler).
Jetzt möchte ich wissen, wo bei diesen Verknüpfungen der Eintrag "nummer_zwei ist gleich 1" fehlt, wenn es Verknüpfungen mit dieser Version gibt.

EDIT:
Die SELECT-Anweisung, die _nicht_ funktioniert:
SELECT DISTINCT nummer_eins, zeitstempel, nummer_zwei FROM rel WHERE nummer_zwei <> 1
 

KSG9|sebastian

Top Contributor
Ich versteh deine Erklärung absolut nicht, aber falls du die Tabellen verknüpfen willst:

1. nimm den timestamp aus der REL-Tabelle raus und mach es so:

EINS(id, tstamp, text)
ZWEI(id, text)
DREI(einsId, zweiId);

Tabelle EINS:
1, 17:39, "Spieltag 1"
1, 17:44, "Spieltag 1"
1, 17:57, "Spieltag 1"
2, 17:40, "Spieltag 2"
3, 18:30, "Spieltag 3"

Tabelle ZWEI:
1, "Mannschaften"
2, "Bayern München"
3, "Werder Bremen"
4, "Hamburger SV"
5, "Makaay"
6, "Klose"
7, "van Boyten"

Tabelle REL:
1, 1
1, 1
1, 2
1, 3
3, 1
3, 2

SELECT DISTINCT eins.*, zwei.* FROM eins, zwei WHERE eins.id = rel.einsId AND zwei.id = rel.zweiId

Nach Möglichkeit kein select * verwenden sondern halt SELECT eins.id as eid, zwei.id as zid u.s.w.
 

SamHotte

Top Contributor
Zeitstempel aus REL rausnehmen geht nicht, sonst kracht es wegen Indexfehler (in deinem Beispiel in Zeile 2). Außerdem brauche ich die Versionen.

Vielleicht nochmal zur Klarstellung: es kommt vor, dass in REL Verknüpfungen stehen (z. B. mit den Knoten 2,4,6), aber die Verknüpfung mit Knoten 1 fehlt. Wenn das der Fall ist, möchte ich sie einfügen, ansonsten nichts tun. Wie finde ich es heraus, wo (also bei welchen Werten aus EINS) ich diese Verknüpfung einfügen muss?
 

Ilja

Bekanntes Mitglied
SELECT DISTINCT t1.nummer_einz FROM rel t1 WHERE nummer_zwei != 1 AND NOT EXISTS (SELECT t2.nummer_einz FROM rel t2 WHERE t2.nummer_zwei = 1 AND t1.nummer_eins = t2.nummer_eins)

Voraussetzung: MySQL > v4.0
bei v3.x gibts kein Subselect
 

SamHotte

Top Contributor
Konnte ich nicht, da ich bislang die Datenhaltung (leider) mit Access machen muss - es ist ein Prototyp, und meine Testanwender haben nur Office auf dem Rechner :-/

Kennt vielleicht einer 'ne gute Referenz für den SQL-Dialekt von Access? Mit der Hilfe krieg' ich die Krise ...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
B SQLite Befehl bauen? Datenbankprogrammierung 4
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
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

Ähnliche Java Themen


Oben