2

私は、SQL Server (T-SQL) に非常に単純な多対多のテーブル構造 (以下を参照) を持っています。

する必要がある:

  • 関連付けられている人がいないすべてのジョブを選択します
  • 表示されていない、または削除されている人のみに関連付けられているすべてのジョブを選択します
  • 削除されたすべてのジョブを選択します。

これらすべてが結果の単一のテーブルを返す必要があります

これは単一の結合のみのクエリで可能ですか ( IN/ NOT IN、ネストされた選択、ユニオン、または一時テーブルなどを使用せずに)?

スキーマ:

  ID
  IsVisible
  IsDeleted

人事労務

  PersonID
  JobID

ジョブ

  ID
  IsDeleted

各クエリを個別に実行してから、コードでデータセットを結合できるはずですが、結合を使用してこれを行う簡単な方法があるかどうか興味がありました。

疑似コードは、正確であれば応答に問題ありません。

ありがとう!

4

2 に答える 2

0

CASEステートメントは、各 raw の特定の条件を識別するために使用されます。それらを知る必要がない場合は、単に削除してください。

Select J.Id, CASE WHEN PersonVisible Is Null THEN '1 - Not Associated'
                  WHEN PersonVisible = 1 OR PersonDeleted = 1 THEN '2 - Person NotVisible/Deleted'
                  WHEN J.Deleted = 1 THEN '3 - Deleted Jobs'
             ELSE '4 - All Except above' END as Conditions
From Jobs J Left Join
    (Select jobId,IsVisible PersonVisible, IsDeleted PersonDeleted
     From Person p join PersonJobs pj on p.Id = pj.personId
    ) X On J.Id = X.jobId
Order by Conditions
于 2013-10-25T21:30:59.190 に答える