Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL- Daten aus 3 Tabellen auslesen (https://www.delphipraxis.net/116537-sql-daten-aus-3-tabellen-auslesen.html)

Andi_j62 1. Jul 2008 13:38

Datenbank: Oracle • Zugriff über: ODBC

SQL- Daten aus 3 Tabellen auslesen
 
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

mquadrat 1. Jul 2008 13:49

Re: SQL- Daten aus 3 Tabellen auslesen
 
Wenn der Inhalt im Feld "Bereich" immer gleich ist, solltest du dir mal das Schlüsselwort distinct anschauen.

mkinzler 1. Jul 2008 14:17

Re: SQL- Daten aus 3 Tabellen auslesen
 
Oder eine Gruppierung durchführen

marabu 1. Jul 2008 14:23

Re: SQL- Daten aus 3 Tabellen auslesen
 
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).

alphaville 1. Jul 2008 14:34

Re: SQL- Daten aus 3 Tabellen auslesen
 
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

Andi_j62 1. Jul 2008 15:45

Re: SQL- Daten aus 3 Tabellen auslesen
 
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

DeddyH 1. Jul 2008 15:47

Re: SQL- Daten aus 3 Tabellen auslesen
 
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

mkinzler 1. Jul 2008 15:47

Re: SQL- Daten aus 3 Tabellen auslesen
 
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;

Andi_j62 1. Jul 2008 16:04

Re: SQL- Daten aus 3 Tabellen auslesen
 
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!

marabu 1. Jul 2008 16:25

Re: SQL- Daten aus 3 Tabellen auslesen
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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