2016-09-19 21 views
0

我試圖根據用戶的ID加入第二個表useri_ban,並附加條件:useri_ban.start_ban = max_start如何訪問加入內的子查詢中的父列

爲了讓我算算max_start,我要運行以下子查詢:

(SELECT MAX(ub.start_ban) AS max_start, user_id FROM useri_ban ub WHERE ub.user_id = useri.id) 

此外,爲了增加max_start每一行,我需要內加入這個子查詢的結果爲主要結果。但是,似乎一旦我應用該聯接,子查詢就不能再訪問useri.id

我在做什麼錯?

SELECT 
    useri.id as id, 
    useri.email as email, 
    useri_ban.warning_type_id as warning_type_id, 
    useri_ban.type as type, 
    useri.created_at AS created_at 
FROM `useri` 

inner join 
(SELECT MAX(ub.start_ban) AS max_start, user_id FROM useri_ban ub WHERE ub.user_id = useri.id) `temp` 
    on `useri`.`id` = `temp`.`user_id` 

left join `useri_ban` on `useri_ban`.`user_id` = `useri`.`id` and `useri_ban`.`start_ban` = `max_start` 
+0

第1步:確保您需要的子查詢中的數據被保留。 第2步:給子表一個別名。 第3步:外部選擇中的引用別名表 – Fallenreaper

回答

0

這是否解決了您的問題?您需要在內部查詢中使用GROUP BY,而不是另一個連接。

SELECT useri.id, useri.email, maxQuery.maxStartBan 
    FROM useri 
    INNER JOIN 
    (
    SELECT useri_ban.user_id ubid, MAX(useri_ban.startban) maxStartBan 
     FROM useri_ban 
      GROUP BY useri_ban.user_id 
    ) AS maxQuery 
     ON maxQuery.ubid = useri.id;