2016-09-19 2 views
0

Ich versuche, links die zweite Tabelle useri_ban basierend auf den Benutzer-IDs zu verbinden, mit der zusätzlichen Bedingung: useri_ban.start_ban = max_start.Zugriff auf die übergeordnete Spalte aus einer Unterabfrage innerhalb eines Joins

Um mich max_start zu berechnen, ich habe die folgende Unterabfrage auszuführen:

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

Um darüber hinaus max_start zu jeder Zeile hinzuzufügen, ich innere Notwendigkeit, diese Unterabfrage des Ergebnisses in das Hauptergebnis beitreten . Es scheint jedoch, dass die Unterabfrage nach dem Anwenden dieses Joins nicht mehr auf useri.id zugreifen kann.

Was mache ich falsch?

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

Schritt 1: Stellen Sie sicher, dass Daten in der Unterabfrage, die Sie benötigen, beibehalten werden. Schritt 2: Geben Sie der Untertabelle einen Aliasnamen. Schritt 3: Referenzalias-Tabelle in der äußeren Auswahl – Fallenreaper

Antwort

0

Löst dies Ihr Problem? Sie benötigen GROUP BY in der inneren Abfrage anstelle einer anderen Verknüpfung.

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; 
Verwandte Themen