AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL- Daten aus 3 Tabellen auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL- Daten aus 3 Tabellen auslesen

Ein Thema von Andi_j62 · begonnen am 1. Jul 2008 · letzter Beitrag vom 2. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Andi_j62

Registriert seit: 20. Okt 2003
Ort: Kempten
46 Beiträge
 
Delphi 7 Professional
 
#1

SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 13:38
Datenbank: Oracle • Zugriff über: ODBC
Hallo Zusammen,

ich habe ein kleines Problem und hoffe dass mir jemand helfen kann. Ich möchte aus 3 Tabellen Daten auslesen und habe Euch die Struktur unten mal vereinfacht dargestellt.

Tabelle 1
id (eindeutig)

Tabelle 2
id (eindeutig)
vorname
nachname

Tabelle 3
id (kommt mehrfach vor)
bereich

Es soll nun die Tabelle 1 abgearbeitet und die anderen Daten dazugespielt werden. Wobei die Anzahl der Datensätze denen der Tabelle 1 entsprechen soll.

id, vorname, nachname, bereich

Das Problem liegt darin, dass es in der Tabelle 3 mehrere Datensätze mit der gleichen id geben kann, wobei aber im feld "bereich" immer der gleicher Inhalt steht.

Wenn ich nun folgende Abfrage durchführe:

select t1.id, t2.vorname, t2.nachname, t3.bereich from
tabelle1 t1
left outer join tabelle2 t2
on t2.id=t1.id
left outer join tabelle3 t3
on t3.id=t1.id

bekomme ich zwar alle Daten, aber wenn z.B. in der Tabelle 3 5 Datensätze mit gleicher id sind, werden auch 5 Datensätze ausgegeben und das will ich nicht!

Vielleicht kann mir ja jemand helfen. Danke!

Viele Grüße
Andi
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#2

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 13:49
Wenn der Inhalt im Feld "Bereich" immer gleich ist, solltest du dir mal das Schlüsselwort distinct anschauen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 14:17
Oder eine Gruppierung durchführen
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 14:23
Hallo Andi,

mir sind bisher zwei Ansätze dazu begegnet:

SQL-Code:
select t1.id, t2.vorname, t2.nachname,
/* new fashion:  TO_STRING(CAST(COLLECT(t3.bereich) AS varchar2_ntt)) AS bereiche */
/* old fashion:  NVL(concat_all(concat_expr(t3.bereich, ',')), '-/-') bereiche */
from tabelle1 t1
left outer join tabelle2 t2 on t2.id=t1.id
left outer join tabelle3 t3 on t3.id=t1.id
Freundliche Grüße


Nachtrag: Ich habe das Problem so verstanden, dass Tabelle t3 einen Beziehungsdatentyp m:n implementiert. Dabei können mehrere verschiedene Bereiche einem ID zugeordnet sein, PK wäre dann (id, bereich).
  Mit Zitat antworten Zitat
alphaville

Registriert seit: 6. Dez 2006
Ort: Wurmlingen
3 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 14:34
Hi,

den bereich einfach als Subselect ???

select
t1.id,
t2.vorname,
t2.nachname,
(select distinct t3.bereich from tabelle3 t3 where t3.id=t1.id) bereich
tabelle1 t1
left outer join tabelle2 t2
on t2.id=t1.id

Gruß Uwe
  Mit Zitat antworten Zitat
Andi_j62

Registriert seit: 20. Okt 2003
Ort: Kempten
46 Beiträge
 
Delphi 7 Professional
 
#6

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 15:45
Danke erst mal für die Info!

An alphaville habe ich noch eine Frage:

Ich habe das sql-statement mal so umgesetzt, bekomme aber folgende Meldung:

00923: from keyword not found where expected

Kannste bitte noch mal über das sql-statement von Dir schauen, wäre nett!

Gruß Andi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 15:47
Ich bin zwar nicht alphaville, aber
SQL-Code:
select
t1.id,
t2.vorname,
t2.nachname,
(select distinct t3.bereich from tabelle3 t3 where t3.id=t1.id) bereich
FROM tabelle1 t1
left outer join tabelle2 t2
on t2.id=t1.id
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
mkinzler
(Moderator)

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

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 15:47
Es fehlt einfach ein FROM
SQL-Code:
select
    t1.id,
    t2.vorname,
    t2.nachname,
    (select distinct t3.bereich from tabelle3 t3 where t3.id=t1.id) bereich
from
    tabelle1 t1
        left outer join tabelle2 t2 on t2.id=t1.id;
Markus Kinzler
  Mit Zitat antworten Zitat
Andi_j62

Registriert seit: 20. Okt 2003
Ort: Kempten
46 Beiträge
 
Delphi 7 Professional
 
#9

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 16:04
Danke an alle, aber jetzt habe ich eine andere Fehlermeldung. Ich habe Euch jetzt mal die Originalabfrage, die lautet

select "RL"."INTERNALID" as "INTERNALID",
"PV"."FIRSTNAME" as "VORNAME",
"PV"."LASTNAME" as "NACHNAME",
(select distinct "MV"."CLUB_REGION" from "PUBLIC_MEMBERS_VIEW" "MV"
where "MV"."INTERNAL_ID"="RL"."INTERNALID") bereich
from "BTV_REFEREELICENSE" "RL"
left outer join "PUBLIC_PERSONS_VIEW" "PV"
on "PV"."INTERNAL_ID"="RL"."INTERNALID"


wobei aus dem Beispiel folgende Zuordnung gilt:

tabelle1 -> BTV_REFEREELICENSE
tabelle2 -> PUBLIC_PERSONS_VIEW
tabelle3 -> PUBLIC_MEMBERS_VIEW

Jetzt kommt folgende Fehlermeldung:

01427: single-row subquery returns more than one row

Vielleicht kann mir noch jemand einen Tipp geben, wäre super!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: SQL- Daten aus 3 Tabellen auslesen

  Alt 1. Jul 2008, 16:25
Ganz offensichtlich gibt es mehr als eine CLUB_REGION zu einem bestimmten INTERNAL_ID.

Beschreibe bitte mal die Komplexitäten:

RL (1:0,n) MV | Zu jedem RL können mehrere MV existieren
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:12 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