2016-09-19 5 views
0

Я пытаюсь оставить вторую таблицу 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; 
Смежные вопросы