| |
|
|
 |
Autor |
Nachricht |
 |
| |
| Andi_j62 |
#1| Verfasst am: 01.07.2008, 14:38 Titel: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 46 Status: offline Beiträge: 44 angemeldet: 20.10.2003 Wohnort: Kempten Delphi 7 Professional

|
Sprache: Delphi (Win32) 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 |
|
 |
|
|
|
| |
| mquadrat |
#2| Verfasst am: 01.07.2008, 14:49 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 26 Status: offline Beiträge: 350 angemeldet: 13.02.2004 Delphi 2007 Professional

|
Wenn der Inhalt im Feld "Bereich" immer gleich ist, solltest du dir mal das Schlüsselwort distinct anschauen. |
|
 |
|
|
|
| |
| mkinzler |
#3| Verfasst am: 01.07.2008, 15:17 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
sehr aktives Mitglied Status: offline Beiträge: 18.802 angemeldet: 09.12.2005 Wohnort: Heilbronn RAD-Studio 2007 Professional

|
Oder eine Gruppierung durchführen |
|
 |
|
|
|
| |
| marabu |
#4| Verfasst am: 01.07.2008, 15:23 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
sehr aktives Mitglied Status: offline Beiträge: 10.014 angemeldet: 06.04.2005 Wohnort: Limburg (Lahn) Delphi 7 Architect

|
Hallo Andi,
mir sind bisher zwei Ansätze dazu begegnet:
| SQL-Code: | markieren | 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). |
Zuletzt bearbeitet von marabu am 01.07.2008, 15:45, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| alphaville |
#5| Verfasst am: 01.07.2008, 15:34 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 44 Status: offline Beiträge: 2 angemeldet: 06.12.2006 Wohnort: Wurmlingen Delphi 2006 Enterprise

|
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 |
#6| Verfasst am: 01.07.2008, 16:45 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 46 Status: offline Beiträge: 44 angemeldet: 20.10.2003 Wohnort: Kempten Delphi 7 Professional

|
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 |
#7| Verfasst am: 01.07.2008, 16:47 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 42 Status: offline Beiträge: 6.654 angemeldet: 17.09.2006 Wohnort: Schweina/Thüringen Delphi 2007 Professional

|
Ich bin zwar nicht alphaville, aber
| SQL-Code: | markieren | 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 |
| |
 10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche. |
 |
|
|
|
| |
| mkinzler |
#8| Verfasst am: 01.07.2008, 16:47 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
sehr aktives Mitglied Status: offline Beiträge: 18.802 angemeldet: 09.12.2005 Wohnort: Heilbronn RAD-Studio 2007 Professional

|
Es fehlt einfach ein FROM
| SQL-Code: | markieren | 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 |
#9| Verfasst am: 01.07.2008, 17:04 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 46 Status: offline Beiträge: 44 angemeldet: 20.10.2003 Wohnort: Kempten Delphi 7 Professional

|
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 |
#10| Verfasst am: 01.07.2008, 17:25 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
sehr aktives Mitglied Status: offline Beiträge: 10.014 angemeldet: 06.04.2005 Wohnort: Limburg (Lahn) Delphi 7 Architect

|
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 |
|
 |
|
|
|
| |
| Andi_j62 |
#11| Verfasst am: 02.07.2008, 08:43 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 46 Status: offline Beiträge: 44 angemeldet: 20.10.2003 Wohnort: Kempten Delphi 7 Professional

|
Hallo marabu,
es gibt zu jedem rl genau einen pv aber mehrere mv. Wobei bei allen mv im Feld "club_region" der gleicher Wert drin steht und den brauche ich aber auch.
Gruß Andi |
|
 |
|
|
|
| |
| DeddyH |
#12| Verfasst am: 02.07.2008, 08:54 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 42 Status: offline Beiträge: 6.654 angemeldet: 17.09.2006 Wohnort: Schweina/Thüringen Delphi 2007 Professional

|
| Andi_j62 hat folgendes geschrieben: | | Wobei bei allen mv im Feld "club_region" der gleicher Wert drin steht |
Anscheinend nicht. |
 10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche. |
 |
|
|
|
| |
| Andi_j62 |
#13| Verfasst am: 02.07.2008, 09:06 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 46 Status: offline Beiträge: 44 angemeldet: 20.10.2003 Wohnort: Kempten Delphi 7 Professional

|
dann soll einfach die club_region aus dem ersten gefundenen Satz aus mv genommen werden! Kann man das realisieren? |
|
 |
|
|
|
| |
| DeddyH |
#14| Verfasst am: 02.07.2008, 09:09 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 42 Status: offline Beiträge: 6.654 angemeldet: 17.09.2006 Wohnort: Schweina/Thüringen Delphi 2007 Professional

|
Unter Oracle geht das AFAIK mit ROWNUM. Schau mal hier: http://www.sql-tips.de/index.php/Ausgabebeschr%C3%A4nkung#ORACLE |
 10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche. |
 |
|
|
|
| |
| Andi_j62 |
#15| Verfasst am: 02.07.2008, 09:16 Titel: Re: SQL- Daten aus 3 Tabellen auslesen |
 |
 |
 |
|
Mitglied Alter: 46 Status: offline Beiträge: 44 angemeldet: 20.10.2003 Wohnort: Kempten Delphi 7 Professional

|
Danke an alle! Mit ROWNUM klappt es jetzt! |
|
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|