私は多くの居住者がいる旅行をしています。居住情報が指定されていないすべての旅行を返す単一のクエリが必要です。指定された居住地に一致するすべての旅行。
このクエリから最初のものを取得できます。
SELECT * FROM `trips` WHERE (((NOT EXISTS (SELECT id FROM residencies WHERE trips.id = residencies.trip_id))
しかし、2 番目を取得するには、次のビットも追加する必要があります。
INNER JOIN `residencies` ON (`trips`.`id` = `residencies`.`trip_id`)
WHERE 句の前に結合を追加すると、居住者 ID があり、居住者 ID がない結果が求められます。それは明らかに何も返しません。では、1 つのクエリで完全な結果セットを取得するには、これをどのように記述すればよいでしょうか? これでは、ストアド プロシージャは許可されていません。
私はRailsを使用しているので、答えがRails固有のものであればボーナスです(ただし必須ではありません)。そして、誰かが searchlogic プラグインでこれを行う方法を示すことができれば、大きなボーナスです。
現在、名前付きスコープとして最初の要件があります。
Trip.named_scope :residencies_empty, :conditions => ['NOT EXISTS (SELECT id FROM residencies WHERE trips.id = residencies.trip_id)']
2 番目の要件は、searchlogic から入手できます。
Trip.residences_id_equals(id)
理想的な解決策は、次のような searchlogic スコープです。
Trip.residencies_null_or_residencies_id_equals(id)