サブクエリで一致しない結果を返す必要があるクエリがあります。サブクエリは空の結果を返す可能性があるため、サブクエリが空のセットを返す場合はデフォルト値(たとえば0)を設定して、IN (NULL)
常に別のNULLが返されるのを防ぐ必要があります。
例えば
SELECT * FROM example_table WHERE id NOT IN (subquery_that_selects_ids)
subquery_that_selects_ids
整数のセット、つまり(1,2,5,6)を返すか、サブクエリで一致する結果が見つからない場合は空のセットを返すことができます。
COALESCE
サブクエリは複数の結果を返す可能性があるため、ここでは機能しません。
ソリューションはSQLiteまたはpostgresqlで機能する必要があります。サブクエリが空のセットを返さないようにするにはどうすればよいですか?
クエリは記述どおりに機能するはずだと誰もが言っています。そして、あなたはすべて正しいです。クエリはRails3のARELによって作成されています。ここに完全なクエリを投稿しようとしたときに、配列条件を使用しているときにARELが空のセットにNULLを入力していることに気付きました。
IE Railsでの私のクエリは次のようになりました:
Object.where("id NOT IN (?)", Object.where(other_conditions).select(:id))
に置き換えられていたとObject.where(other_conditions)
評価され[]
たとき?
NULL
そこで、クエリを次のように書き直します。
Object.where("id NOT IN (" + Object.where(other_conditions).select(:id).to_sql + ")")
問題が解決しました。
私は@MichaelBuenの功績を認めていますが、クエリが正しいので、クエリが記述どおりに機能すると言った人にも賛成票を投じています。特に@OMGPoniesと@TedElliottに感謝します!