Hilfe bei SQL-Abfrage

Hallo,

Wie lässt sich folgende SQL-Abfrage realisieren:

Gegeben sind:

pers_tab

pers_id|name

1 | Meier
2 | Müller
3 | Huber
4 | Schmitt

tel_tab

pers_id|tel

1 | 7654654
1 | 456546
1 | 5465465
2 | 54656
2 | 5646

Ergebnis soll sein:

pers_id|name |tel1 |tel2 |tel3 | tel(n)

1 | Meier | 7654654 | 456546 | 5465465 |…
2 | Müller | 54656 | 5646 | null |…
3 | Huber | null | null | null
4 | Schmitt | null | null | null

Vielen Dank für Eure Antworten.

  • Versuche dieses :

select PERS_ID, NAME,
max( decode( rn, 1, TEL ) ) c1,
max( decode( rn, 2, TEL ) ) c2,
max( decode( rn, 3, TEL ) ) c3
from (
select PERS_TAB.PERS_ID, PERS_TAB.NAME, TEL_TAB.TEL,
row_number() over (partition by PERS_TAB.PERS_ID order by
TEL_TAB.PERS_ID) rn
from PERS_TAB, TEL_TAB
where PERS_TAB.PERS_ID = TEL_TAB.PERS_ID
)
group by PERS_ID, NAME
order by PERS_ID
/

  • Hilfreich wäre es gewesen, wenn du deine DB Version angegeben hättest, diese Lösung funktioniert unter Oracle 9iR2 und höher

Gruss

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Vielen Dank für Deinen Lösungsvorschlag.

Sorry die DB Version anzugeben hab ich vergessen. Ich verwende MYSQL
5.0.21.

MySQL scheint von der Syntax her nicht alles zu kennen was du in deinem Beispiel verwendest. Mal schauen ob sich vergleichbares auch in MYSQL zusammenbauen lässt.

MySQL scheint von der Syntax her nicht alles zu kennen was du
in deinem Beispiel verwendest. Mal schauen ob sich
vergleichbares auch in MYSQL zusammenbauen lässt.

Hast du dich schonmal mit den Befehlen UNION und UNION ALL befasst?
Müsste damit möglich sein.

aRanox

Hast du dich schonmal mit den Befehlen UNION und UNION ALL
befasst?

Ja, mit Union lässt sich das Problem aber nicht lösen.

Ja, mit Union lässt sich das Problem aber nicht lösen.

Sorry, hab da wohl was anderes gesehen.
Kannst ja mal gucken ob du unter

was findest

Viel Glück
aRanox

Vielen Dank für den Link. Ich war schon lange auf der Suche nach einem Tutorial das nicht nur die standard SQL-Abragen abdeckt.

Vielen Dank für den Link. Ich war schon lange auf der Suche
nach einem Tutorial das nicht nur die standard SQL-Abragen
abdeckt.

Bitte. Gern geschehen. Dann hat eine Woche GOOGLElei wenigstens etwas gebracht. Dein Problem schon gelöst?

aRanox

>>Dein Problem schon gelöst?

Nee, habe das Problem noch nicht gelöst. Denke
mal das dies mit einer einfachen SQL Abrage unmöglich ist.
Vermutlich braucht man Stored Procedures dafür. Darin kenn ich mich aber zuwenig aus.

Alternative ist, ich verarbeite das Resultset in PHP so weiter, das ich am Ende die gewünschte Anzeige bekomme. Ist aber von der Performance bestimmt schlecher.

Hi du

>>Dein Problem schon gelöst?

Nee, habe das Problem noch nicht gelöst. Denke

Und warum machst du das nich so:
Ausgang:
pers_id|name |tel

1 | Meier | 7654654
1 | Meier | 456546
1 | Meier | 5465465
2 | Müller | 54656
2 | Müller | 5646
2 | Müller | 0 null
3 | Huber | 0 null

Gruß
aRanox

Und warum machst du das nich so:
Ausgang:
pers_id|name |tel

1 | Meier | 7654654
1 | Meier | 456546
1 | Meier | 5465465
2 | Müller | 54656
2 | Müller | 5646
2 | Müller | 0 null
3 | Huber | 0 null

Bis jetzt mach ich es auch so: Ich nehm dieses Recordset les es in mehrdimensionales array ein und bau mir dann eine HTML Tabelle zusammen mit mehreren Spalten für tel. Ist ziemlich umständlich. Was besseres ist mir aber bis jetzt nicht eingefallen.

Kleiner Tip noch zum SQL-Server-Access-Sicherheit-Thread.
Schreib mal genauer wo Dein Problem liegt. Dann wird sich bestimmt auch eine Lösung finden.

Hallo Moyo

umständlich. Was besseres ist mir aber bis jetzt nicht
eingefallen.

Bei Server hätte ich dir noch zwei Tipps geben können.

  1. Formular und Listenfelder
  2. Unterdatenblatt
    Ansonsten bin ich am Ende.

aRanox