Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL-Abfrage in 2 Tabellen (https://www.delphipraxis.net/188063-sql-abfrage-2-tabellen.html)

ekatharina 27. Jan 2016 16:38

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.

mkinzler 27. Jan 2016 16:43

AW: SQL-Abfrage in 2 Tabellen
 
Wie sieht die Beziehung zwischen den beiden Tabellen aus?

Jumpy 27. Jan 2016 16:44

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 :)

nahpets 27. Jan 2016 17:05

AW: SQL-Abfrage in 2 Tabellen
 
Wenn die beiden Tabellen über id_p / p_id zusammenhängen:
SQL-Code:
select tab2.wann from tab1, tab2
where tab1.id_p = tab2.p_id
and tab1.Herkunft = 'Deutschland'
ansonsten über A_ID
SQL-Code:
select tab2.wann from tab1, tab2
where tab1.a_id = tab2.a_id
and tab1.Herkunft = 'Deutschland'

DeddyH 27. Jan 2016 17:24

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'

ekatharina 27. Jan 2016 20:45

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'

mkinzler 27. Jan 2016 20:50

AW: SQL-Abfrage in 2 Tabellen
 
Besser so:
SQL-Code:
SELECT
   m.*
FROM
   patienten p
     join messwerte m ON m.pat_id = p.id_pat
WHERE
  p.herkunft_kind = 'Deutschland';
Ich würde auch statt dem Joker die Felder explizit angeben

ekatharina 27. Jan 2016 20:56

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.

haentschman 27. Jan 2016 21:45

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:

Perlsau 3. Feb 2016 04:33

AW: SQL-Abfrage in 2 Tabellen
 
Zitat:

Zitat von ekatharina (Beitrag 1328542)
Ich habe als erstes die "moderne" Variante ausprobiert (aber noch nicht wirklich begriffen) ...


SQL-Code:
SELECT
  tab2.wann
FROM
  tab2
  INNER JOIN
    tab1 ON tab1.id_p = tab2.p_id
WHERE
  tab1.Herkunft = 'Deutschland'
Das ist eigentlich ganz einfach:
  1. der erste Eintrag nach INNER JOIN legt die Nachschlage-Tabelle fest (Lookup-Tabelle, Untertabelle)
  2. der zweite Eintrag nach ON bestimmt den PK (Primary Key), die fortlaufende und dadurch eindeutige ID
  3. der dritte Eintrag nach dem = legt den FK (Foreign Key = Fremdschlüssel) in der Haupttabelle fest, der an Stelle des eigentlichen Wertes eingetragen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz