Warum das Gruppieren in einer Unterabfrage Probleme verursacht
-
21-09-2019 - |
Frage
Wenn ich die 2 kommentierten Zeilen in die folgende Unterabfrage einbeziehe, scheint es ewig zu dauern, bis mein Sybase 12.5 ASE -Server irgendwelche Ergebnisse erzielt. Ohne diese 2 Zeilen läuft die Abfrage in Ordnung. Was ist so falsch mit dieser Gruppierung?
select days_played.day_played, count(distinct days_played.user_id) as OLD_users
from days_played inner join days_received
on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and days_played.user_id in
(select sgia.user_id
from days_played as sgia
where sgia.day_played < days_played.day_played
--group by sgia.user_id
--having sum(sgia.B_first_msg) = 0
)
group by days_played.day_played
Lösung 3
Ok, ich habe herausgefunden, was das Problem war, musste ich Benutzer -ID in die Unterabfrage einbeziehen: "Wo Days_played.user_id = sgia.user_id und sgia.day_played <Days_played.day_played"
Andere Tipps
Finden Sie heraus, was die Abfrage macht, indem Sie Showplan verwenden, um die Erklärung anzuzeigen.
Können Sie in diesem Fall die Unterabfrage nicht beseitigen, indem Sie sie Teil der Hauptanfrage machen?
Könnten Sie versuchen, die Abfrage wie folgt neu zu schreiben?
select days_played.day_played,
count(distinct days_played.user_id) as OLD_users
from days_played
inner join days_received on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and 0 = (select sum(sgia.B_first_msg)
from days_played as sgia
where sgia.user_id = days_played.user_id
and sgia.day_played < days_played.day_played
)
group by days_played.day_played
Ich denke, das sollte Ihnen eine bessere Leistung geben ...