Delete

Hallo shader09,

nicht so schnell aufgeben.
Dein SQL und die Beschreibung deines Problem im ersten Post passen nicht ganz zusammen.

So ist deine Beschreibung:
Beispiel:
Tabelle Tarif
ID --- Preisstufe
GAQ - 70
AAA - 20
BBB - 30
CCC - 70

Tabelle Preis
Preisstufe
20
30
70

Der SQL müsste dann aber
Code:
SELECT Preis.Preisstufe, Tarif.ID
FROM Preis, Tarif
WHERE (((Preis.Preisstufe)="70") AND ((Tarif.ID)="GAQ"));
lauten. Ausserdem gibt es mehrere Ergebnisse, wenn es in der Tabelle Tarif verschiedene ID's mit gleicher Preisstufe gibt, da es sich bei dem SQL um einen Cross Join handelt.
Kann in der Tabelle Preis eine Preisstufe doppelt vorkommen oder ist das Feld Preisstufe eindeutig?
Und die Löschung eines Datensatzes erfolgt nur in der Tabelle Preis, so das es dann keine Daten zu einem Tarif in der Tabelle Preis gibt?
 
Kann in der Tabelle Preis eine Preisstufe doppelt vorkommen oder ist das Feld Preisstufe eindeutig

Ja sie kann doppelt vorkommen, deswegen muss ich ja auch die Verknüpfung zu der anderen Tabeller erstellen. Ansonsten würde ich Preisstufen löschen die noch andere Tarife brauchen bzw benutzen.


Und die Löschung eines Datensatzes erfolgt nur in der Tabelle Preis, so das es dann keine Daten zu einem Tarif in der Tabelle Preis gibt?

Ja die Löschung erfolgt nur da.
 
Hallo shader09,

wenn in der Tabelle Preis eine Preisstufe doppelt vorkommen kann, dann gibt es kein eindeutiges Kriterium um einen Datensatz zu löschen.

Tabelle Preis
Preisstufe
20
70
30
70

In diesem Beispiel würdest du beide Datensätze mit Preisstufe "70" löschen, da das Feld "Preisstufe" ja nicht eindeutig ist. Mit deiner aktuellen DB-Struktur kannst due das Probelm nicht lösen.
Wenn in der Tabelle "Preis" die ID aus der Tabelle "Tarif" der Fremdschlüssel ist, dann geht es. Kannst du deine DB-Struktur der der beiden Tabellen noch mal posten, am besten das Create Table-Statement.
Welche DB benutzt du?
 
wenn in der Tabelle Preis eine Preisstufe doppelt vorkommen kann, dann gibt es kein eindeutiges Kriterium um einen Datensatz zu löschen.

Es können nicht nur eine Preisstufe doppelt vorkommen, sondern mehrere.
Dadurch das es kein eindeutiges Kriterium gibt, "Bau" ich ja die Verbindung zu der Tabelle Tarife auf.


Kannst du deine DB-Struktur der der beiden Tabellen noch mal posten, am besten das Create Table-Statement.

Wie komm ich daran!?


Welche DB benutzt du?

Ist eine Access Datenbank.
 
Hallo,

Ist eine Access Datenbank.
Dann vergiss das mit dem "Create Table-Statement", dachte du hast eine MySql- oder MSSql-DB.
Es können nicht nur eine Preisstufe doppelt vorkommen, sondern mehrere.
Dadurch das es kein eindeutiges Kriterium gibt, "Bau" ich ja die Verbindung zu der Tabelle Tarife auf.
Das ist ja auch ok, aber wie willst du einen Datensatz löschen, wenn z.B. zwei Datensätze dem Kriterium entsprechen?

Eigentlich brauchst du in der Tabelle Preis eine ID und diese ID (und nicht Preisstufe) ist dann der Fremdschlüssel in der Tabelle Tarif.

Tabelle Preis
PID Preisstufe
1 - 20
2 - 70
3 - 30
4 - 70

Tabelle Tarif
TID --- PID
GAQ - 4
AAA - 1
BBB - 3
CCC - 1

Dann kannst du korrekt selektieren und auch löschen.
 
Hallo shader09,

so bekommst du dann die gewünschte Ergebnisszeile:
Code:
SELECT Tarif.TID, Tarif.PID, Preis.Preisstufe
FROM Preis INNER JOIN Tarif ON Preis.PID = Tarif.PID
WHERE (((Tarif.TID)="GAQ") AND ((Preis.Preisstufe)="70"));
Hier der entsprechende Delete-Befehl:
Code:
delete from Preis where Preis.PID in 
(Select Preis.PID
FROM Preis INNER JOIN Tarif ON Preis.PID = Tarif.PID
WHERE (((Tarif.TID)="GAQ") AND ((Preis.Preisstufe)="70")));
 
Danke für deine 2 Anweisungen, nur leider kann ich nicht einfach in der
Datenbank eine neues Feld anlegen. Da es eine Geschäftsdatenbank ist
und ich nicht darumwurschteln kann. Aber trotzdem Danke für deine Hilfe.
Muss ich es auf einen anderen Weg machen um die gewünschten Daten
zu löschen.
 
Zurück