2010-08-08 11 views

Antwort

16

Sie benötigen einen Aliasnamen für die Unterabfrage, und Sie müssen die Bedingungen gelten entweder für beide Abfragen, die Sie Vereinigung:

SELECT MAX(DateTime) 
FROM (

    SELECT DateTime 
    FROM Class_Searches 
    WHERE User_Email = '[email protected]' 
    AND DateTime > NOW() - INTERVAL 30 DAY 

    UNION ALL 

    SELECT DateTime 
    FROM Book_Searches 
    WHERE User_Email = '[email protected]' 
    AND DateTime > NOW() - INTERVAL 30 DAY 

) AS x 

oder Daten zurück, so dass Sie den Zustand in der äußeren Abfrage anwenden können:

SELECT MAX(DateTime) 
FROM (

    SELECT DateTime, User_Email 
    FROM Class_Searches 

    UNION ALL 

    SELECT DateTime, User_Email 
    FROM Book_Searches 

) AS x 
WHERE User_Email = '[email protected]' 
AND DateTime > NOW() - INTERVAL 30 DAY 
1

Ein Alias ​​ist Wenn Sie etwas umbenennen, wie SELECT t.time from table t, ist t der Alias ​​für diese Tabelle. In diesem Fall müssen Sie einen Aliasnamen für die Tabellen, die von den Unterabfragen erzeugt geben:

SELECT MAX(ut.DateTime) 
FROM (
(
    SELECT DateTime 
    FROM Class_Searches 
) cs 
UNION ALL (
    SELECT DateTime 
    FROM Book_Searches 
) bs 
) ut 
WHERE User_Email = '[email protected]' 
AND ut.DateTime > NOW() - INTERVAL 30 DAY 

Das nach wie vor, wird allerdings nicht funktionieren, weil Sie von der UNION keine user_email Spalt zurückgegeben. So versucht:

SELECT MAX(ut.DateTime) 
FROM (
(
    SELECT DateTime, User_Email 
    FROM Class_Searches 
) cs 
UNION ALL (
    SELECT DateTime, User_Email 
    FROM Book_Searches 
) bs 
) ut 
WHERE ut.User_Email = '[email protected]' 
AND ut.DateTime > NOW() - INTERVAL 30 DAY 

Es ist möglich, dass das noch nicht richtig, weil die UNION-Syntax wird funktionieren, aber zumindest ist es ein gutes Stück näher.

+0

ich diesen Fehler mit der zweiten Abfrage: # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe 'bs entspricht) UT WHERE ut.User_Email =' [email protected] ' UND ut.DateTime> NOW() - INTER' bei Zeile 10 – babonk

Verwandte Themen