2016-09-19 4 views
0

useri_ban.start_ban = max_startという別の条件で、ユーザーのIDに基づいて2番目のテーブルuseri_banを残しています。主な結果には、このサブクエリの結果を参加結合内のサブクエリから親列にアクセスする方法

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

さらに、すべての行にmax_startを追加するために、私はインナーに必要:私は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; 
関連する問題