2016-10-17 7 views
0

whereステートメントを別のselectステートメントで照会で使用することは可能ですか?たとえば:whereステートメントにselectステートメントを使用できますか?

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND 
((select final_dateofpay FROM com_payments 
WHERE main_section ='Supplier') IS NOT NULL) 
+0

試しましたか?残りのクエリを表示できますか? JOINは、サブ選択するほど関連性があります。 –

+0

うん。それはうまくいくはずです。 – Erik

+0

少し奇妙に見えます。あなたは何をしようとしているのですか?代わりに 'EXISTS'を見てください。 – jarlh

答えて

1

はあなたのwhere句あなたのコードため

(select final_dateofpay FROM com_paymentsWHERE main_section ='Supplier') 戻って複数の行にそのようなサブクエリを使用することはできません。したがって、IS NOT NULL と直接組み合わせることはできません。 where節が行レベルで動作することを忘れないでください。

しかし、サブクエリの結果が結果になるかどうかをチェックしたいと思うと思います。その場合、あなたはこの

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND exists (select final_dateofpay FROM com_payments WHERE main_section ='Supplier')

1

のようにそれを使用することができますSQL標準はIN (...)NOT IN (...)EXISTS (...)NOT EXISTS(...)ようなステートメントでサブクエリ式の全体のホストを可能にします。

この場合、クエリは次のようになります。

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND 
    EXISTS (select final_dateofpay FROM com_payments 
    WHERE main_section ='Supplier')) 

このクエリの効果は1がないのでmain_section 'Supplier'または全てオリジナルの行で任意のcom_paymentsが存在しないので、もしどちらかが行を取得していないということだろう存在する。

この奇妙な結果の理由は、サブクエリに含まれるselectステートメントのフィールドを参照していないためです。メインクエリを参照するサブクエリwhereにフィルタを追加すると、おそらく目的とする結果が得られます。

関連する問題