2010-08-08 66 views

回答

16

您需要爲子查詢的別名,你需要的條件或者適用於兩個查詢你的工會:

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 

或返回數據,這樣就可以在外部查詢申請條件:

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

別名是當您重命名某些內容時,如SELECT t.time from table t,t是該表的別名。在這種情況下,你需要給一個別名由子查詢產生的表:

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 

這仍然無法工作,雖然,因爲你沒有一個USER_EMAIL列從UNION返回。因此,請嘗試:

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 

由於UNION語法,這可能仍然不能正常工作,但至少它離得更近。

+0

我得到這個錯誤與第二個查詢: #1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在'bs '附近使用的正確語法。ut WHERE ut.User_Email ='[email protected]h.com' AND ut.DateTime> NOW() - INTER'在第10行 – babonk 2010-08-08 21:03:27

相關問題