UNION in IN() als Teil einer WHERE-Klausel?
bearbeitet von AugeHallo
Ich möchte in MySQL eine `UNION`-Abfrage, die ein `LIMIT` enthält, in einer Bedingung der `WHERE`-Klausel benutzen. Der `UNION` an sich funktioniert und bringt mir – wegen des impliziten `DISTINCT`s – wie erwartet zwischen 6 und 12 Ergebniszeilen.
~~~sql
(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)
~~~
Setze ich diese Abfrage nun in die `WHERE`-Klausel einer anderen Abfrage …
~~~sql
SELECT
id,
user_id,
name,
time,
subject,
category
FROM entries
LEFT JOIN userdata
ON userdata.user_id = entries.user_id
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))
ORDER BY time DESC
LIMIT 6
~~~
… meldet mir MySQL (in phpMyAdmin, worin ich das Konstrukt teste) einen Fehler (Zeilenumbrüche von mir).
~~~
#1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'UNION (SELECT id FROM entries WHERE spam = 0 ORDER BY edited DESC LIMIT 6))' at line 11
~~~
Gibt's da zu viele LIMIT- und/oder ORDER BY-Anweisungen oder wo liegt mein Fehler?
Tschö, Auge
--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett