Auge: UNION in IN() als Teil einer WHERE-Klausel?

Beitrag lesen

Hallo

Mit einem zusätzlichen Paar Klammern um den gesamten UNION-SELECT geht das auch (auch ohne Alias).

SELECT * FROM (
  (SELECT id FROM entries WHERE spam = 0 ORDER BY time DESC LIMIT 6)
    UNION
  (SELECT id FROM entries WHERE spam = 0 ORDER BY edited DESC LIMIT 6)
)

Warum unter 5.7 Klammern um die ge-UNION-ten Selects nötig sind, ist mir nicht ganz einsichtig.

Um die ORDER BY und/oder LIMIT-Anweisungen der Einzelselects von denen des gesamten UNION zu unterscheiden, ist das für mich einsichtig. Ich wollte das ja auch so machen, um eine Vorfilterung, aus der ich eine schlusseinliche Auswahl treffe, vornehmen zu können.

Ziel war es, (angenommene) sechs Datensätze auszuwählen, die aus den neuen und/oder editierten Datensätzen stammen können. Mein Plan, hole die sechs neuesten frisch angelegten und die sechs neuesten editierten Datensätze und wähle aus dieser Menge von mindestens sechs bis maximal zwölf Datensätzen, zeitlich absteigend sortiert, die sechs neuesten Datensätze aus. Also brauche ich schon in den einzelnen Selects die Sortierung und das Limit, um dort nur noch die relevanten Einträge zu haben und dann noch einmal die gleichartige Sortierung-Limit-Kombi für das Gesamtergebnis. Um die beiden Fälle unterscheiden zu können, halte ich eine Klammerung durchaus für sinnvoll.

Tschö, Auge

--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett