schwierige Abfrage

hevapeyma

Benutzer
Beiträge
23
Hallo an alle,



ich habe eine Frage bezüglich einer Abfrage, die etwas kompliziert ist. Es gibt folgende Tabellen:

CREATE TABLE Auftrag(

Auftrag_Id int,

Auftrag_Text varchar(200),

Auftrag_Lang_Text varchar(2000),

PRIMARY KEY (Auftrag_Id);




CREATE TABLE Probe(

Probe_Id int,

Auftrag_Id int,

Probe_Text varchar(200),

Probe_Lang_Text varchar(2000),

PRIMARY KEY (Probe_Id),

FOREIGN KEY (Auftrag_Id) REFERENCES Auftrag(Auftrag_Id));




CREATE TABLE Bild(

Bild_Id int,

Probe_Id int,

Auftrag_Id int,

Bild_Text varchar(200),

Bild varbinary(max),

PRIMARY KEY (Bild_Id),

FOREIGN KEY (Probe_Id) REFERENCES Probe(Probe_Id),

FOREIGN KEY (Auftrag_Id) REFERENCES Auftrag(Auftrag_Id));


Es gibt zu jeden Auftrag 10 Proben. Zu jeder Probe gibt es ein Bild. Ich möchte folgende Abfrage generieren:


Ich möchte 3 Aufträge mit dem Auftrag_ID und Auftrag_Text auslesen und dazu genau ein Bild von einer den 10 Proben.


Ich habe bereits folgende Lösung:


SELECT TOP 3 Auftrag.Auftrag_Id, Auftrag.Auftrag_Text, Bild.Bild_Text, Bild.Bild

FROM Auftrag

JOIN Bild

ON Auftrag.Auftrag_Id = Bild.Auftrag_Id

WHERE Bild_Text in('Bild10', 'Bild20', 'Bild30')

ORDER BY Auftrag.Auftrag_Id


Die Abfrage ist nicht zielführend, da die Bilder dynamisch zugeordnet werden sollen.


Ich bin Dankbar für jede Lösung!


Viele Grüße!
 
Werbung:
Der Text ist schwer lesbar.
Wieso gibt es bei dem Bild eine Spalte für den Auftrag UND für die Probe? Wenn zu jeder Probe ein Bild gehört ist das unnötig.
 
Code:
SELECT   TOP 3
     Auftrag.Auftrag_Id,
     Auftrag.Auftrag_Text,
     B.Bild_Text,
     B.Bild
FROM   Auftrag
LEFT JOIN (

SELECT   ROW_NUMBER() OVER (PARTITION BY Bild.Auftrag_Id ORDER BY Bild.Bild_Id) AS zeile,
     Bild.Auftrag_Id,
     Bild.Bild_Text,
     Bild.Bild
FROM   Bild

     ) B
ON     Auftrag.Auftrag_Id = B.Auftrag_Id
AND     B.zeile = 1
ORDER BY Auftrag.Auftrag_Id
Du hast natürlich jetzt in jeder Zeile das eine Bild. Ist eigentlich quatsch aber ich weiß nicht genau was du erreichen willst.
 
Vielleicht Hilft folgende Abfrage:
Code:
SELECT A.Auftrag_Text, P.Probe_Text, B.Bild_Text
FROM Auftrag AS A
JOIN Probe AS P
ON A.Auftrag_Id = P.Auftrag_Id
JOIN Bild AS B
ON P.Probe_Id = B.Probe_Id

Die Ausgabe (Top 3 und entsprechenden Spalten) musst du selbst anpassen.
Brauchst du von jedem Auftrag nur ein Bild oder alle 10 Bilder?
 
Werbung:
Zurück
Oben