![]() |
Datenbank: firebird 2.5 • Version: 2.5 • Zugriff über: Delphi 2007
SQL-Abfrage in 2 Tabellen
Hi Ihr Lieben,
ich bekomme einfach keine SQL-Abfrage hin wenn es um Informationen aus zwei Tabellen geht. Tab1-Felder: A_ID, ID_P, Herkunft ... ... ... Tab2-Felder: A_ID, P_ID, Wann ... ... ... Die SQL sollte mir alle Wann-Daten aus der Tab2 liefern sofern die Herkunft aus der Tab1 z.B. 'Deutschland' entspricht. Seit Tagen alles mögliche probiert und experimentiert und nun fast am verzweifeln :roll: .... (DB = Firebird / Delphi = 2007) Danke für einen Hinweis. |
AW: SQL-Abfrage in 2 Tabellen
Wie sieht die Beziehung zwischen den beiden Tabellen aus?
|
AW: SQL-Abfrage in 2 Tabellen
Wie hängen die Tabellen denn zuasmmen? Über A_ID oder über P_ID/ID_P?
Edit: Zwei Dumme, ein Gedanke, kein roter Kasten :) |
AW: SQL-Abfrage in 2 Tabellen
Wenn die beiden Tabellen über id_p / p_id zusammenhängen:
SQL-Code:
ansonsten über A_ID
select tab2.wann from tab1, tab2
where tab1.id_p = tab2.p_id and tab1.Herkunft = 'Deutschland'
SQL-Code:
select tab2.wann from tab1, tab2
where tab1.a_id = tab2.a_id and tab1.Herkunft = 'Deutschland' |
AW: SQL-Abfrage in 2 Tabellen
Oder etwas "moderner" über einen INNER JOIN.
SQL-Code:
SELECT
tab2.wann FROM tab2 INNER JOIN tab1 ON tab1.id_p = tab2.p_id WHERE tab1.Herkunft = 'Deutschland' |
AW: SQL-Abfrage in 2 Tabellen
Hi,
Danke für die Antworten. Ich habe als erstes die "moderne" Variante ausprobiert (aber noch nicht wirklich begriffen) jedoch erhalte ich zumindest ein Ergebnis statt Fehlermeldungen. Merkwürdig ist nur: In der tab1.Herkunft gibt es knapp 16.000 (von ca. 22.000) Datensätzen mit "Deutschland". In der Tab2 gibt es insgesamt nur 70.000 Datensätze überhaupt und trotzdem sagt mir der SQL: dass er 92.699 Datensätze findet. Wo könnte mein Logik-fehler begründet sein? nachfolgend die "Originale"-SQL SELECT messwerte.* FROM messwerte INNER JOIN patienten ON patienten.id_pat = messwerte.pat_id WHERE patienten.herkunft_kind = 'Deutschland' |
AW: SQL-Abfrage in 2 Tabellen
Besser so:
SQL-Code:
Ich würde auch statt dem Joker die Felder explizit angeben
SELECT
m.* FROM patienten p join messwerte m ON m.pat_id = p.id_pat WHERE p.herkunft_kind = 'Deutschland'; |
AW: SQL-Abfrage in 2 Tabellen
Es sieht so aus als ob ich den Fehler schon gefunden habe
SELECT messwerte.* FROM messwerte INNER JOIN patienten ON patienten.id_pat = messwerte.pat_id and patienten.arzt_id = messwerte.arzt_id WHERE patienten.herkunft_kind = 'Deutschland' Muss das nur noch an einem "seltenem" Land überprüfen. Naja da wo ich das Ergebnis noch an den Fingern nachzählen kann:-D Der Joker war der Bequemlichkeit geschuldet. Im Ergebnis brauche ich eh nur einige Felder. Aber danke für den Hinweis. Euch allen meinen herzlichsten Dank für Euer Wissen und die Hilfe. |
AW: SQL-Abfrage in 2 Tabellen
Moin...:P
Ein kleiner Hinweis auf Normalisierung. Die Ländernamen gehören, wenn es denn möglich ist, in eine separate Tabelle und in die bestehende Tabelle die ID des Landes. :thumb: |
AW: SQL-Abfrage in 2 Tabellen
Zitat:
SQL-Code:
Das ist eigentlich ganz einfach:
SELECT
tab2.wann FROM tab2 INNER JOIN tab1 ON tab1.id_p = tab2.p_id WHERE tab1.Herkunft = 'Deutschland'
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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