私は正しい質問のタイトルを思いつくことが困難でした。私はそれを編集するために任意のアドバイスをします。postgresの結合テーブルによる行の整列
私の問題:ユーザー、仕事:私は2つのモデルとアプリ(ジョブボード)を持っています。ユーザーは多くのジョブを持つことができ、ジョブはpremium
またはfree
になります。ジョブは、が有効期限が切れたまたはアクティブでも可能です。 valid_until
パラメータIS NOT NULL
の場合は有効です。それ以外の場合は有効期限が切れています(毎日自動的にこれを設定するバックグラウンドジョブがあります)。
私は、アクティブなジョブを持っているが、私はプレミアム仕事とユーザーがと仮定し、ユーザーが同時にアクティブプレミアムの両方で無料の求人を持つことができる無料のジョブで、ユーザーの前に来たいユーザーを選択しようとしています。問い合わせの上
SELECT DISTINCT users.id, users.email FROM users
LEFT OUTER JOIN jobs ON jobs.owner_id = users.id
WHERE jobs.valid_until IS NOT NULL;
が正常に少なくとも一つのアクティブなジョブを持つユーザー(プレミアムまたはフリーのいずれか)を選択し、私はちょうど仕事の表に従ってユーザーを注文する必要があります。私は助けとヒントを感謝します。ありがとう!
ジョブをまったく持っていないユーザーがいないように、(内側の)join left joinを使用する必要はありません。ここでは、有効な/有効なジョブのテストでそれらの失業者が排除されるので、左端の結合が機能します。しかし、あなたがjobs.valid_until IS NULLを要求した場合、あなたはまた、失業中のユーザーを取得します。左結合は、内部結合の戻り値と、NULLで拡張された不一致の左テーブル行を返します。 – philipxy