UNION in IN() als Teil einer WHERE-Klausel?
bearbeitet von AugeHallo
> > ~~~
> > WHERE entries.id IN((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))
> > ~~~
>
> Hast du mal die Klammern um die Einzel-Selects weggelassen?
Nein. Da die einzelnen zum UNION gehörenden SELECTs jeweils ihre eigenen `ORDER BY edited DESC LIMIT 6` haben, sollen sie laut der MySQL-Doku geklammert werden, damit die letzen Bedingungen nicht auf den gesamten UNION angewandt werden. Also habe ich es nicht anders probiert.
> Oder noch eine Klammer um das Gesamt-Union-Konstrukt gesetzt? Oder beides?
Das werde ich morgen noch einmal probieren.
> > ~~~
> > #1064 - You have an error in your SQL syntax;
> > check the manual … for the right syntax to use near
> > 'UNION (SELECT id FROM entries WHERE spam = 0 ORDER BY edited DESC LIMIT 6))' at line 11
> > ~~~
>
> Ich vermute, dass MySQL aufgrund der öffnenden Klammer eine Subquery erwartet. Und die endent nach der `)`, woraufhin Syntax folgt, die in einem IN() falsch ist.
Hmm Klammer auf vom `IN`, Klammer auf des ersten `SELECT`, Klammer zu des ersten `SELECT`, `UNION`, Klammer auf des zweiten `SELECT`, Klammer zu des zweiten `SELECT` und schließlich Klammer zu von `IN`. *Eigentlich* sollte das stimmen.
~~~sql
WHERE … IN((SELECT … ORDER BY time DESC LIMIT 6) UNION (SELECT … ORDER BY edited DESC LIMIT 6))
~~~
Danke erst einmal für den Denkanstoß.
Tschö, Auge
--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett