Announcement

Collapse
No announcement yet.

Join mit 2 x ORDER BY?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Join mit 2 x ORDER BY?

    Hallo zusammen,

    ich habe eine Frage zu einer Abfrage mit Sortierung und komme selber nicht weiter:

    Eine Tabelle categorie ist über die Kategorie_ID mit der Tabelle image verknüpft. Ich möchte nun für jede Kategorie ein Bild mit der niedrigsten Position haben. Das Problem ist, mehrere Bilder in einer Kategorie sein können, und es wird einfach das erste passende genommen, aber ich möchte das Bild mit der niedrigsten Position haben. Irgedwie müsste ich vorher noch ein ORDER BY einsetzen. Aber ich weiß nciht wie. Verschachtelt? Oder gibt es eine andere Lösung?

    SELECT i.image_id as image_id,i.position as position, c.cat_id as cat_id, c.cat_name as cat_name
    categorie_table c
    LEFT JOIN image_table i ON i.cat_id = c.cat_id
    GROUP BY c.cat_id
    ORDER BY c.cat_id DESC
    LIMIT 8

    Würde mich über Hilfe freuen,
    Gruß,
    Threepy

  • #2
    Hi,

    wenn Du von einer Spalte den niedrigsten wert möchtest, dann packst Du sie in die MIN() Funktuion und alle anderen Spalten ins GROUP BY

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Hallo Dim, vielen Dank für die Info. Aber wie kann ich mir das genau vorstellen? Wie muss der Code aussehen?

      Irgendwo "SELECT max(i.position) FROM image_table" verschachteln? Steh leider auf dem Schlauch...

      Comment


      • #4
        Also das funktioniert, allerdings mit der Einschränkung, dass es pro kategorie nur ein Bild pro Position gibt.

        Code:
        with image_table as
        (
          SELECT 1 id_image, 3 position, 4 kategorie from dual
          UNION ALL
          SELECT 2 id_image, 2 position, 4 kategorie from dual
          UNION ALL
          SELECT 3 id_image, 1 position, 4 kategorie from dual
          UNION ALL
          SELECT 4 id_image, 2 position, 2 kategorie from dual
          UNION ALL
          SELECT 5 id_image, 3 position, 2 kategorie from dual
        )
        SELECT i1.* FROM
        image_table i1,
        (
          SELECT MIN(i.position) position, kategorie
        FROM image_table i
        GROUP BY i.kategorie
        ) i2
        WHERE i1.position = i2.position
        AND i1.kategorie = i2.kategorie

        Comment


        • #5
          Vielen Dank für die Unterstützung. Ich glaube, jetzt funktioniert es.

          Comment

          Working...
          X