![]() |
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'
|
AW: SQL-Abfrage in 2 Tabellen
Schön einfach erklärt.:thumb: Nur eine Kleinigkeit.
Zitat:
|
AW: SQL-Abfrage in 2 Tabellen
Das klingt jetzt so, als könne man lediglich Schlüsselfelder verknüpfen. Vielleicht sollte man es etwas anders erklären:
- nach dem JOIN bezeichnet man die Tabelle, die verknüpft werden soll. - nach dem ON definiert man, unter welchen Bedingungen verknüpft werden soll. Das sind zwar zumeist Schlüsselfelder wie schon angesprochen, tatsächlich ist man völlig frei in der Definition. |
AW: SQL-Abfrage in 2 Tabellen
Lieber DeddyH, lieber Dejan Vu, das habt ihr beide sehr schön ergänzt :thumb:
Allerdings halte ich es in manchen Fällen, in denen grundlegende Fragen zu einem Thema gestellt werden und damit offenbar wird, daß der Fragesteller gewiß kein Profi ist, für kontraproduktiv, eine Erklärung mit allen nur denkbaren Eventualitäten zu versehen. Bei passender Gelegenheit, wenn der Fragesteller über ausreichende Grundkenntnisse verfügt, wird er sich womöglich selber zu weitreichenderen Fragestellungen entwickeln. Selbstverständlich weiß auch ich, daß man nicht unbedingt einen Primary Key benötigt. Die Eindeutigkeit eines Records kann auch durch andere Constraints erzwungen werden und man kann mehrere Spalten als Key verwenden. Das würde in diesem Zusammenhang aber erstmal zu weit führen, denn die Frage, die ich hier beantwortet hatte, war die nach dem Funktionieren der "modernerern Version" des SQL-Codes von DeddyH, nicht mehr und nicht weniger. Und diese Antwort ist mir offenbar gelungen. Mehr lag nicht in meiner Absicht. Doch selbstverständlich seien euer beider unerreichbare Genialität und herausragende Fertigkeiten im Umgang mit Delphi und mit Datenbanken an dieser Stelle voll & ganz wahrgenommen & akzeptiert. |
AW: SQL-Abfrage in 2 Tabellen
Sry, aber wer etwas dagegen hat, ggf. korrigiert zu werden, sollte einfach nicht posten.
|
AW: SQL-Abfrage in 2 Tabellen
Zitat:
|
AW: SQL-Abfrage in 2 Tabellen
Zitat:
Zitat:
Es ging mir nicht um eine vollständige und umfassende Erklärung, denn "wie es geht", hatte ja bereits DeddyH oben mit seinem SQL-Code gezeigt. Mein Anliegen bestand lediglich darin, dem Unverständnis des TE für diese Code abzuhelfen. Bin ich damit DeddyH oder dir auf die Füße getreten, tut mir das leid, das war mit Sicherheit nicht beabsichtigt (mußt du natürlich nicht glauben). Wenn ihr aber grundsätzlich nicht möchtet, daß ich mich hier auch schreibend und erklärend betätige, einfach mitteilen, wir haben hier ja keine Zwangsmitgliedschaft wie bei der GEZ und ich werd's garantiert überleben :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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