AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SQL-Abfrage in 2 Tabellen

Ein Thema von ekatharina · begonnen am 27. Jan 2016 · letzter Beitrag vom 3. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2   
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#1

SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 17:38
Datenbank: firebird 2.5 • Version: 2.5 • Zugriff über: Delphi 2007
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 ....

(DB = Firebird / Delphi = 2007)

Danke für einen Hinweis.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 17:43
Wie sieht die Beziehung zwischen den beiden Tabellen aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 17:44
Wie hängen die Tabellen denn zuasmmen? Über A_ID oder über P_ID/ID_P?

Edit: Zwei Dumme, ein Gedanke, kein roter Kasten
Ralph
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 18:05
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'
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 18:24
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'
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#6

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 21:45
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'
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 21:50
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
Markus Kinzler
  Mit Zitat antworten Zitat
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#8

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 21:56
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

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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#9

AW: SQL-Abfrage in 2 Tabellen

  Alt 27. Jan 2016, 22:45
Moin...
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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: SQL-Abfrage in 2 Tabellen

  Alt 3. Feb 2016, 05:33
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.
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