Probleme mit JOIN

Hm, ich habe doch noch eine Frage,

Wie Yaslaw schon richtig erkannt hat, bin ich mit Oracle nicht so gut befreundet...

mit dieser Lösung kann ich jetzt 2 werte dazujoinen (bzw. eigentlich nur einen und einen zum vergleich)
Code:
SELECT
   idtbl2,
   LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id) AS ids
FROM jobs
GROUP BY idtbl2

jetzt habe ich in jobs noch einen Spalte namend DATUM... kann ich diese auch irgendwie ausgeben?


bei:
Code:
SELECT
   idtbl2, datum,
   LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id) AS ids
FROM jobs
GROUP BY idtbl2
bekomme ich eine Rückmeldung: "Kein GROUP BY-AUSDRUCK" - not a GROUP BY expression
 
Zuletzt bearbeitet:
Arbeitest du sonst mit MySQL? MySQL verzeiht leider solche unachtsamkeiten.

Was soll mit der Spalte datum passieren? Soll die Gruppe Mit der idtbl2 gruppiert werden oder willst du das grösste oder kleinste Datum?

Oracle weiss das nicht. MySQL würde jetzt einfach danach gruppieren.

Ergo. Bei einem GROUP BY muss jedes Feld entweder im GROUP BY vorkommen oder mit einer Aggregationsfunktion (COUNT(), SUM(), MIN(), MAX(), LISTAGG() etc) behandelt werden.
 
*facepalm*

Da hätte ich auch selbst draufkommen können!

Jup, MySQL ist wohl das womit ich am meisten bisher gemacht habe... aber auch da bin ich eher "Einsteiger"...


Vielen Vielen Dank
 
okay, anderer fall, selbes umfeld!

wenn ich jetzt zwei werte bein join vergleichen möchte und einen 3. wert gruppieren...

Code:
JOIN (SELECT
   idtbl2, datum,
   LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id) AS ids
FROM jobs
WHERE Trunc(datum) = SYSDATE - 1)
GROUP BY idtbl2) tbl2
ON tbl1.idtbl1 = tbl2.idtbl2 and tbl1.time = tbl2.datum

ind tbl1.time und tbl2.datum steht ein datetime mit uhrzeit...

> so geht es schonmal nicht... wie ists richtig?

Danke
 
Zähl mal die Klammern.
Nach dem WHERE ist eine zuveil

Zudem, gilt immer noch. Was Gruppieren oder eine Aggregationsfunktion auf datum

Finde die 2 Unterschiede
SQL:
JOIN (SELECT
   idtbl2, datum,
   LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id) AS ids
FROM jobs
WHERE Trunc(datum) = SYSDATE - 1
GROUP BY idtbl2, datum) tbl2
ON tbl1.idtbl1 = tbl2.idtbl2 and tbl1.time = tbl2.datum
 
Moin JesusFreak777,

ergänzend zu Yaslaws Suchbild-Aufgabe:

Da du geschrieben hast "ind tbl1.time und tbl2.datum steht ein datetime mit uhrzeit..." sollte der Join bzw die letzte Zeile angepasst werden auf

... JOIN ( ...) tbl2
IN tbl1.idtbl1 = tbl2.idtbl2 AND Trunc(tbl1.TIME) = tbl2.datum;


Grüße
Biber
 
@Biber.
Nope. tbl2.datum ist auch ohne TRUNC() im Select des Subqueries.
Entweder beide mit TRUNC() behandeln oder keines von beiden
 
Upps, Yaslaw,

hast natürlich recht,
Hatte mich durch das "Trunc(datum) = Sysdate -1 " in der WHERE-Klausel verwirren lassen.
Das GROUP BY-Feld ist aber in der Tat ein Datetime.
Also @JesusFreak777 bitte meine Ergänzung ignorieren.

Grüße
Biber
 
Zurück