SQL Suitable

derocco

Lt. Junior Grade
Registriert
Nov. 2015
Beiträge
321
Situation:


Ich habe eine Tabelle Products und eine Tabelle Suitable:

Es gibt Produkte und dazu passen 0...N andere Produkte, die über suitable verlinkt sind.

Ich möchte nun ein Select machen, welches mit für z.b. 5 Produkte alle die dazu gehörigen produkte ausgiebt (und zwar auf einer Zeile)

Genau das ist das Problem...


Code:
SELECT p.product_id, p.product_name
, suit.*
FROM products p 
left join suitable suit on p.product_id = suit.product_id;

Resultat ist da ja dass ich da pro Produkt dann mehrere Zeilen habe.

Vielen Dank
 
smn schrieb:
Naja, dazu musst du deine Ergebnismenge einfach nach dem entsprechenden Kriterium gruppieren...
http://www.w3schools.com/sql/sql_groupby.asp

Hmm aber das löst ja das problem nicht, dass ich mehrere Rows zum selben Produkt habe.

Also was ich möchte:

Zu einem Mercedes Sprinter passt zB. ein Fiat Duacto, ein VW LT und ein IVECO Daily

Jetzt soll das Resultat sein:

Code:
Product_name        Suitable       Suitable    Suitable
Mercedes Sprinter   Fiat Duacto    VW LT       Iveco Daily

Die Suitable sind noch priorisiert aber das lasse ich hier mal weg.

das Resultat ist aber bei mir immer:

Code:
Product_name        Suitable       
Mercedes Sprinter   Fiat Duacto   
Mercedes Sprinter   VW LT       
Mercedes Sprinter   Iveco Daily
Ergänzung ()

ICh glaube in DB" habe ich das mal mit DECODE gemacht. In mysql kriege ich es nun aber nicht zum laufen.
Gehe ich da in die richtge richtung?
 
Zuletzt bearbeitet:
theoretisch 0.n aber defacto reicht auch 0.10 oder so
 
Keine Ahnung, auf welcher DB du unterwegs bist, aber in Oracle kannst du "listagg" verwenden. Eigentlich sollte aber dein Mapping von DB nach Domäne sowas tun. Mehrere Zeilen sind eigentlich genau das, was solch ein Datenmodell bei einem Join zurückgibt. Für mich sieht das auf DB-Seite nach dem erwarteten Ergebnis aus.
 
idr. arbeite ich mit DB2 aber hier mit mysql...
Man könnte auch das DAtenmodell umstellen wenn das sinvoller erscheint....
 
Zuletzt bearbeitet:
Also ich würde nochmal hinterfragen wollen, was genau mit dem Ergebnis gemacht wird? Wenn der Output hier nur eine display Info sein soll, dann warum nicht doch einfach groupen und die passenden concatenaten?

Ergebnis dann in der Art:
Code:
Product        Suitable
Mercedes       Fiat, VW, ...

Zur Weiterverarbeitung erschließt sich mir noch nicht, wozu du Spalten brauchst (?)
 
Du könntest es eventuell so machen:

Code:
SELECT p.Product_name , STUFF(( SELECT  ', '+ suit.product_name FROM Suitable suit
WHERE p.product_id = suit.product_id FOR XML PATH('')),1 ,1, '')  Suitables
FROM products p
GROUP BY p.Product_name;

Das gibt dann folgendes Ergebnis:

Code:
Product_name      | Suitables
Mercedes Sprinter | Fiat Duacto, VW LT, Iveco Daily


Nicht ganz, was du willst - aber eventuell ausreichend.
 
Kannst du mir das erklären?
Ich kriegs so nicht zum laufen;

Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'XML PATH('')),1 ,1, '')
 
Aaahhh, verdammte Axt. Das ist die SQL Server Syntax ;-)

Hab überlesen, dass du MySql nutzt.

Das sollte die entsprechende Syntax sein:

Code:
SELECT FieldA, GROUP_CONCAT(FieldB) AS Members
FROM  TableName 
GROUP BY FieldA
ORDER BY FieldA;
 
Klappt, aber nun muss ich das resultat halt dann parsen um wieder einzele werte zu haben.

In DB2 ging das irgendwie mit MAY (DECODE

Habe mir da was notiert aber komme nicht mehr drauf wie das lief
 
Zuletzt bearbeitet:
Zurück
Oben