2017-10-13 24 views
0

私はなく、サブクエリの仕事は、私は、私の問題はまだ間違った結果が含まれている、それはより速くSub Query Not In Left Join Alternative?

SELECT f.ACCOUNT_ID, 
     f.TGL, 
     p.ACCOUNT_EMAILADDRESS 


    FROM distributor_kokola.forecast f 
     left join(

       select ACCOUNT_ID 
         from distributor_kokola.forecast 
         where DATE_FORMAT(TGL, "%Y-%m") = DATE_FORMAT(CURDATE(), "%Y-%m") 
         group by ACCOUNT_ID 


    )subb on subb.ACCOUNT_ID = f.ACCOUNT_ID 

     inner join distributor_kokola.push_distributor p on p.ACCOUNT_ID = f.ACCOUNT_ID 
     group by f.ACCOUNT_ID; 

を動作しますが、参加左と

それを変更するので、遅くすることは、この

SELECT f.ACCOUNT_ID, 
     f.TGL, 
     p.ACCOUNT_EMAILADDRESS 


    FROM distributor_kokola.forecast f 
     inner join distributor_kokola.push_distributor p on p.ACCOUNT_ID = f.ACCOUNT_ID 
     where f.ACCOUNT_ID NOT IN(

       select ACCOUNT_ID 
         from distributor_kokola.forecast 
         where DATE_FORMAT(TGL, "%Y-%m") = DATE_FORMAT(CURDATE(), "%Y-%m") 
         group by ACCOUNT_ID 


    ) 

     group by f.ACCOUNT_ID; 

ようなクエリを持っています

Not INを使用すると、クエリ1はNOT INクエリ2を選択します。

左結合を使用してNOT INクエリになる方法を教えてください。

誰でも私を助けることができますか?

ありがとうございました。

答えて

1

LEFT JOINの結果をフィルタリングするWHERE句を追加する必要があります。あなたはWHERE句WHERE subb.ACCOUNT_ID IS NULL適切なを追加する場合は、予想通り、それは(あなたがあなたのサブクエリでGROUP BYを使用するので、重複行の危険はありません)動作するはずです:

SELECT f.ACCOUNT_ID, 
     f.TGL, 
     p.ACCOUNT_EMAILADDRESS 
    FROM distributor_kokola.forecast f 
     left join(
       select ACCOUNT_ID 
         from distributor_kokola.forecast 
         where DATE_FORMAT(TGL, "%Y-%m") = DATE_FORMAT(CURDATE(), "%Y-%m") 
         group by ACCOUNT_ID 
    ) subb on subb.ACCOUNT_ID = f.ACCOUNT_ID 
     inner join distributor_kokola.push_distributor p on p.ACCOUNT_ID = f.ACCOUNT_ID 
     WHERE sub.ACCOUNT_ID IS NULL 
     group by f.ACCOUNT_ID; 

更新

私たちの目標LEFT JOINは、forecastテーブルで、サブクエリに一致する行がないすべての行を見つけることです。そのため、一致する行を持つすべての行を削除するWHERE節が必要です。WHERE sub.ACCOUNT_ID IS NULLはきちんと適合します。

SOユーザー@quassnoiは、この目標を達成するためにwonderful comparison of different methodsと書いています。

+0

ちょっと魅力的な作品ですが、私はまだそれを手に入れません。なぜ、「どこでsubb.ACCOUNT_IDがNULLになっていますか? – Uchsun

+0

親愛なる@Uchsunは、小さなテーブルで左の結合を学び、あなたは簡単に取得します –

+0

@Uchsun私は私の答えを更新し、簡単な説明を追加しました。うまくいけば、今はっきりしている。 –