![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IbDac
Fehlerhaften ForeinKey finden
Moin allerseits,
in einer DB gibt es eine Tabelle ADRESSEN, die eine Spalte ORT_ID enthält, welche auf die Tabelle ORTE verweist, in der Orte, Postleitzahlen und Vorwahlen eingetragen werden. Die Spalte ORT_ID ist jedoch nicht als Foreign-Key deklariert, die entsprechende Zuweisung erfolgt erst im zugehörigen View. Nun habe ich festgestellt, daß in View_ADRESSEN genau eine Adresse weniger angezeigt wird als in der Tabelle ADRESSEN. Wie das zustandekam, konnte ich mir leicht erklären, denn ich habe gestern den halben Tag damit verbracht, die Tabelle ORTE zu bereinigen, weil dort etliche Orte quasi doppelt vorhanden waren: gleiche Postleitzahl mit anderer Schreibweise des Ortes (z.B. München-Schwabing und München mit derselben PLZ). Ich habe also irgendwo vergessen, einer Adresse die verbliebene ORT_ID zuzuweisen (z.B. München-Schwabing gelöscht, aber die Adresse mit dieser ORT_ID nicht geändert), so daß diese eine Adresse nun eine ORT_ID aufweist, die in der Tabelle ORTE nicht mehr existiert. Wie finde ich diesen Record heraus, ohne händisch alle Tabellen durchgehen zu müssen? Besten Dank für euer Interesse. |
AW: Fehlerhaften ForeinKey finden
Code:
(falls ich dein Problem richtig verstanden habe)
select * from ADRESSEN where ORT_ID not in (select ORT_ID from ORTE)
|
AW: Fehlerhaften ForeinKey finden
Oder so:
Code:
Heißt das ID-Feld in Orte auch ORT_ID?
select *
from adressen a left join orte b on a.ort_id = b.<???> where b.<???> is null |
AW: Fehlerhaften ForeinKey finden
Liste der Anhänge anzeigen (Anzahl: 1)
Für's nächste mal:
|
AW: Fehlerhaften ForeinKey finden
Zitat:
Ich konnte den fehlerhaften Record finden und korrigieren. Nun werden in der Originaltabelle genau so viele Records angezeigt wir im View. Herzlichen Dank dafür :love: Zitat:
Die Version von Olli empfinde ich jedoch als handlicher, weil sie kürzer ist (und nicht, weil sie früher da war). Zitat:
Zitat:
Hab's mir gleich runtergeladen, ausgedruckt und an die Wand gepinnt. |
AW: Fehlerhaften ForeinKey finden
Die "not in" Lösung stoßt aber eher an die Grenzen der DB (Begrenzung der Menge), darum wäre die Lösung von Uwe zu bevorzugen.
Gruß K-H |
AW: Fehlerhaften ForeinKey finden
Zitat:
Also warum sollte ich mir da jetzt tiefere und noch weiter tiefergehende Gedanken machen müssen :?: |
AW: Fehlerhaften ForeinKey finden
Zitat:
Auf die Schnelle hab ich zu Firebird nichts konkretes außer diesem Post gefunden: ![]() Dabei ist nicht klar, ob die Limitierung nur für explizite Aufzählung oder auch für dynamische Selectrückgaben erfolgt. Meine Verständnis ist: (not) in .. für kleineren Abgleich (also adhoc, kleine Komfortabfragen) table join .. für unlimitierten Massenabgleich (also für den Rest) Wenn Du es genau für Deine Version wissen willst, musst Du wohl selbst danach suchen oder es ausprobieren. |
AW: Fehlerhaften ForeinKey finden
Da rächt sich die Ansicht, dass man man aus Zeit-/Kostengründen beim Datenbankdesign auf die Deklaration der Constraints VWzüchten kann, da man diese ja im Programm berücksichtigt.
|
AW: Fehlerhaften ForeinKey finden
Zitat:
;) Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz