2017-02-02 2 views
0

をJOINを使用して複数のサブクエリでクエリを変更、JOINを以下のJOINを使用して私によって作成されたクエリであるは、私は、サブクエリを削除し、代わりに利用するために、次のクエリを変更したい

SELECT COUNT(locationid) FROM Passages WHERE PassageTime <= 1485924396 
AND LicenceTag NOT IN (SELECT LicenceTag FROM participant_licencetag WHERE FROM_UNIXTIME(passagetime) BETWEEN from_datetime AND to_datetime) 
AND LocationId NOT IN (SELECT LocationId FROM imagefetchrequests WHERE passagetime BETWEEN StartTime AND EndTime); 

を構築するが、結果は最初のクエリの結果と比較できません。

SELECT COUNT(p.locationid) FROM Passages p 
LEFT JOIN participant_licencetag pl ON p.LicenceTag = pl.LicenceTag 
LEFT JOIN imagefetchrequests ifr ON p.LocationId = ifr.LocationId 
WHERE p.PassageTime <= 1485924396 
AND pl.LicenceTag IS NULL AND ifr.LocationId IS NULL 
AND FROM_UNIXTIME(p.passagetime) BETWEEN pl.from_datetime AND pl.to_datetime 
AND p.passagetime BETWEEN ifr.StartTime AND ifr.EndTime; 

何が問題になる可能性がありますか?

+0

は、内側適用しようとは –

+1

がhttp://meta.stackoverflow.com/questionsを参照してくださいに参加します/ 333952/what-should-i-provide-an-mcve-for-what-to-be-a-very-simple-sql-query – Strawberry

答えて

1

このような句の

何か内に残って結合されたテーブルの一部などの条件を保つ...

SELECT COUNT(p.locationid) FROM Passages p 
LEFT JOIN participant_licencetag pl ON p.LicenceTag = pl.LicenceTag AND FROM_UNIXTIME(p.passagetime) BETWEEN pl.from_datetime AND pl.to_datetime 
LEFT JOIN imagefetchrequests ifr ON p.LocationId = ifr.LocationId AND p.passagetime BETWEEN ifr.StartTime AND ifr.EndTime 
WHERE p.PassageTime <= 1485924396 
AND pl.LicenceTag IS NULL AND ifr.LocationId IS NULL; 
+0

またお試しください。 SELECT COUNT(*) FROM ( SELECT COUNT(p.locationid)から継承した箇所p LEFT JOIN participant_licencetag pl ON p.LicenceTag = pl.Lic通路P 左からp.PassageTime <= 1485924396 AND pl.LicenceTagがpl.from_datetime AND pl.to_datetime UNION BETWEEN NULL AND FROM_UNIXTIME(p.passagetime)IS SELECT COUNT(p.locationid)はimagefetchrequests IFRをJOIN enceTag ON p.LocationId = ifr.LocationId およびifr.LocationIdがNULL およびp.passagetimeの間にifr.StartTime AND ifr.EndTime ) –

関連する問題