![]() |
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 |
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.
|
Re: SQL- Daten aus 3 Tabellen auslesen
Oder eine Gruppierung durchführen
|
Re: SQL- Daten aus 3 Tabellen auslesen
Hallo Andi,
mir sind bisher zwei Ansätze dazu begegnet:
SQL-Code:
Freundliche Grüße
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 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). |
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 |
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 |
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 |
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; |
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! |
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:58 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 by Thomas Breitkreuz