Select: Gezielte Datenzeile anzeigen lassen / Treffer zusammefassen

MysterioJN

SQL-Guru
Beiträge
158
Guten Morgen zusammen,

ich kenne durchaus die "TOP x" -Funktion, die mir bei meinem aktuellen Problem aber nicht weiterhilft.

'Frage: Gibt es eine Möglichkeit, sich z. B. bei Treffer nur die 2. Zeile anzeigen zu lassen. Bzw. die 3. 4. oder 5. Zeile? Also NUR die jeweilige Zeile. Bei Top 5 würde er alle 5 anzeigen, was aber in Unterabfragen nicht zulässig ist.

Alternative und definitiv bessere Möglichkeit wäre: Alle Ergebnisse in eine "Feld/Platzhalter" zu schreiben. Aber wie?

Hintergrund: Ich nutze das Ergebnis des Selects (Tabelle A) für Platzhalter in einem HTML-Formular.
Sobald er aber zu einem Datensatz mehrere Unterdatensatztreffer findet (Tabelle B), mach er mir immer eine neue Seite im HTML-Formular. Sprich für jede Datenzeile aus Tabelle B.

Ziel muss aber sein, das er einfach alle IM SELBEN Formular anzeigt.

Datenbankstruktur:
Tabelle A: Projekte (jedes Projekt eine Datenzeile)
Tabelle B: Zusatzinfos (mehrere Datenzeilen zu einem Projekt)

Ich hoffe, man kann verstehen was ich bräuchte?

Liebe Grüße
Marco
 
Werbung:
Das wäre in der Tat sinnvoller. Nur Wie bekomme ich diese gruppierte Infos aus einer Spalte in Tabelle B in !eine Zelle! der Tabelle A zum zugehörigen Datensatz?
Aktuell zeigt er mir ja zu jedem Treffer von Tabelle B die selbe Spalten aus Tabelle A an.


Beispiel rein fiktiv!

Tabelle A: ID / Name
1 / Apfel
2 / Birne
3 / Kirsche

Tabelle B: ID / Name
1 / rot
2 / grün
3 / blau

JoinTabelle aus Tabelle A und B: ID Tabelle A / ID Tabelle B
1 / 1 (Apfel / rot)
1 / 2 (Apfel / grün)
2 / 3 (Birne / blau)
3 / 1 (Kirsche / rot)
3 / 2 (Kirsche / grün)


Select soll sein: Name Tabelle A / Name zusammengefügt Tabelle B
Apfel / rot, grün
Birne / blau
Kirsche / rot, grün
 
irgendwie sehe ich keine Verbindung zu den ersten Posts von Dir in diesem Thread, aber egal, mal mit PG versucht:

Code:
test=# create table ta(id int primary key, name text);
CREATE TABLE
test=*# create table tb(id int primary key, name text);
CREATE TABLE
test=*# create table tab(aid int references ta, bid int references tb, primary key(aid, bid));
CREATE TABLE
test=*# copy ta from stdin;
Geben Sie die zu kopierenden Daten ein, gefolgt von einem Zeilenende.
Beenden Sie mit einem Backslash und einem Punkt alleine auf einer Zeile, oder einem EOF-Signal.
>> 1   apfel
>> 2   birne
>> 3   kirsche
>> \.
COPY 3
test=*# copy tb from stdin;
Geben Sie die zu kopierenden Daten ein, gefolgt von einem Zeilenende.
Beenden Sie mit einem Backslash und einem Punkt alleine auf einer Zeile, oder einem EOF-Signal.
>> 1   rot
>> 2   grün
>> 3   blau
>> \.
COPY 3
test=*# copy tab from stdin;
Geben Sie die zu kopierenden Daten ein, gefolgt von einem Zeilenende.
Beenden Sie mit einem Backslash und einem Punkt alleine auf einer Zeile, oder einem EOF-Signal.
>> 1   1
>> 1   2
>> 2   3
>> 3   1
>> 3   2
>> \.
COPY 5
test=*# select ta.name, string_agg(tb.name,',') from tab left join ta on tab.aid=ta.id left join tb on tab.bid=tb.id group by ta.name order by ta.name;
  name   | string_agg
---------+------------
 apfel   | rot,grün
 birne   | blau
 kirsche | rot,grün
(3 Zeilen)

test=*#
 
Werbung:
Zurück
Oben