Verweiste Referenzen
Bölk
- datenbank
0 Bölk - Nachtrag0 Ilja0 Bölk
0 Klaus Mock
Hallo!
Folgendes Problem(SQL Server):
Ich möchte mir alle Datensätze einer Tabelle ansehen, zu denen es keine Referenz mehr zur Beziehungstabelle Besteht.
Beispiel:
3 Tabelle: Kunde, Rechnung und Beziehungstabelle.
In der Beziehungstabelle sind die Positionen zw. RechnungsID und KundenID gespeichert. Wir davon aus, dass in der Beziehungstabelle "updates" auf Positionen stattfinden können.
Wie kann ich nun Kunden finden, die nicht in der Beziehungstabelle "geführt" sind.
Ich weiss, die Frage ist schon fast lächerlich einfach aber momentan hab ich Gehirnblockade.
Folgendes versucht:
1)
SELECT Kunde FROM KundenTabelle WHERE NOT EXISTS
(SELECT DISTINCT Kunde FROM Beziehungstabelle)
SELECT COUNT(K.Kunde) AS Anzahl, K.KundeFROM KundenTabelle AS K
LEFT OUTER JOIN Beziehungstabelle AS B ON B.Kunde = K.Kunde
GROUP BY (K.Kunde)ORDER BY Anzahl
Ach ja...
SELECT COUNT(K.Kunde) AS Anzahl, K.Kunde FROM KundenTabelle AS K
LEFT OUTER JOIN Beziehungstabelle AS B ON B.Kunde = K.Kunde
GROUP BY (K.Kunde)ORDER BY Anzahl
Hierbei wollte ich dann über die Anzahl gehen, also bei "Anzahl = 1" gibts den Kunden nur in der KundenTabelle ist aber auch irgendwie ne Krücke.
yo,
Ich möchte mir alle Datensätze einer Tabelle ansehen, zu denen es keine Referenz mehr zur Beziehungstabelle Besteht.
foreign keys sind genau für diesen fall gedacht. grundsätzlich ist es möglich, dass wenn ein datensatz aus einer tabelle (z.b. Kunde) gelöscht wird, alle auf in verweisenden datensätze(beziehungstabelle) automatisch mitgelöscht werden. bin mir aber nicht genau sicher ob mysql das macht und wenn ja ab welcher version.
noch ein weitere tipp, ich würde kunden nicht löschen, sondern nur durch eine spalte auf aktiv und passiv setzen.
Wie kann ich nun Kunden finden, die nicht in der Beziehungstabelle "geführt" sind.
SELECT kundennr
FROM kunden AS k LEFT JOIN beziehungstabelle AS b ON (k.kundennr=b.kundennr)
WHERE b.kundennr IS NULL;
Ilja
Moin!
mysql das macht und wenn ja ab welcher version.
Wie ich schrieb: (MS) SQL Server (2000)
noch ein weitere tipp, ich würde kunden nicht löschen, sondern nur durch eine spalte auf aktiv und passiv setzen.
Muss weg da dieser Eintrag nie mehr gebraucht wird!
...
WHERE b.kundennr IS NULL;
Ich hab gewusst das es so simpel ist... vielen Dank Ilja
Hallo,
Ich hab schon lange nichts mehr mit dem SQL Server getan, aber ich versuche mal einieg Statements (BTW: für den Insider wäre die Version noch interessant, da kann es nämlich erhebliche Unterschiede in der Syntax geben)
Folgendes versucht:
1)
SELECT Kunde FROM KundenTabelle WHERE NOT EXISTS
(SELECT DISTINCT Kunde FROM Beziehungstabelle)
SELECT Kunde from KundenTabelle
WHERE Kunde NOT IN ( SELECT DISTINCT Kunde FROM BEziehungsTabelle)
SELECT COUNT(K.Kunde) AS Anzahl, K.KundeFROM KundenTabelle AS K
LEFT OUTER JOIN Beziehungstabelle AS B ON B.Kunde = K.Kunde
GROUP BY (K.Kunde)ORDER BY Anzahl
SELECT COUNT(K.Kunde) AS Anzahl, K.Kunde
FROM KundenTabelle AS K
LEFT OUTER JOIN Beziehungstabelle AS B ON B.Kunde = K.Kunde
GROUP BY (K.Kunde)
HAVING Anzahl = 0
Grüße
Klaus