MySQL Subquery in Select / Attribute vereinen?

Hallo liebe Mitstreiter der Website-Entwicklung :slight_smile:

Ich steh grad in punkto SQL ein wenig an.
Also es geht darum dass ich an einem System werkel in dem es “Kategorien” gibt in welche “Bilder” fallen.
Nun mache ich eine Übersicht über alle Kategorien und will als optische Aufwertung ein Zufallsbild aus jeder Kategorie daneben haben.

Tabellen sind:
-) Kategorie (Name, ID)
-) Bild (Kategorie_ID, Name, Breite, Hoehe, uvm.)

Meine Abfrage sieht nun (stark vereinfacht, da ich noch mehr in der Datenbnak hab) so aus:

select k.name, k.id, (select b.breite from bild b where b.Kategorie_id=k.id order by rand() limit 1) from Kategorie k

So weit so gut. Allerdings ist das jetzt nur mal die “Breite” wenn man genau schaut. Ich brauch aber noch mehr Attribute aus “Bild”.
Gebe ich einfach mehr Attribute in das Subselect rein, sprich:

krieg ich n SQL Error:

-> Ich darf also im Subselect nur ein einziges Attribut auswählen?

Und mache ich für jedes Attribut ein eigenes Subselect komm ich mir ganz schön blöd vor :unamused: Mal abgesehen davon dass es nicht stimmen würde, da rand() ja jedesmal einen anderen Datensatz auswählen würde…

Kann mir bitte jemand auf die Sprünge helfen? Also einen anderen Lösungsansatz einwerfen? Vielleicht was mit vorgefertigten Abfragen / Views? Oder mir sagen wie ich die Ergebnismengen von 2 selects vereine? Und zwar nicht mit Union, weil das nur geht wenn die Attribute übereinstimmen? Sozusagen in der “Breite” einer Tabelle vereinen, nicht in der “Höhe”?

Danke im Vornherein!
Christoph.

Ich denke, du solltest dir mal (LEFT) JOIN anschauen.

Hey Danke!
Na klar, mit left join gehts :slight_smile:
Aber man verzeihe mir die dumme Frage… wie krieg ich jetzt den Zufall da “rein”?
Also wenn ich left join verwende, kommen ja im Ergebnis ALLE Bilder vor mit ihrer kategorie. Diese mit group by wieder zusammen zu fassen dass ich nur “eine Kategorie mit ihrem Bild” hab geht easy. Allerdings ist es nun immer dasselbe Bild (das erste).

mfG, Christoph.