1

T1とT2の2つのテーブルがあります

列 ID とデータを含む T1

列 id と T1_id を持つ T2

T1.id と T2.T1_id を結合したい

id が T2 に存在しない T1 のすべてのレコードが必要です。つまり、T1.id <> T2.T1_id

したがって、T2 が空の場合、T1 のすべてのレコードを取得する必要があります

問題は

  1. LEFT join den を使用すると、対応する T1_id を持つレコードが T2 に存在する場合でも、T1 id のすべてのレコードがフェッチされます。
  2. 左結合を使用しない場合、T2 が空の場合を除いてすべてが機能し、レコードはフェッチされません

また、同等のlinqが大好きです。

4

1 に答える 1

4

あなたはあなたが望むものに近づいています。LEFT JOINで十分であり、ステートメントに欠けているのはWHERE句条件だけです。

SELECT  a.*
FROM    T1 a
        LEFT JOIN T2 b
            ON a.ID = b.T1_ID
WHERE   b.T1_ID IS NULL

LINQバージョンは次のとおりです。

var _result = from a in T1
              join b in T2 on a.ID equals b.T1_ID into b_join
              from b in b_join.DefaultIfEmpty()
              where b.T1_ID == null
              select a;
于 2013-04-09T13:33:13.887 に答える