1

Ok。1つのテーブルにいくつかのデータがあり、別のテーブルのいくつかのデータを何度も参照しています。

表1-メインクライアントテーブル表2-ユーザー定義フィールド

Table1のクライアントIDと、Table2のすべての添付/使用済みの「使用済み定義済みフィールド」を表示するクエリがあるとします。

SELECT t1.Id, t2.udf
FROM Table1 t1
JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t1.EndDate IS NULL AND
      t1.Id = '1234.9876' AND

結果として次のようになります...

ID            UDF
1234.9876     100
1234.9876     110
1234.9876     118
1234.9876     124
1234.9876     198
1234.9876     256

ここで、これと同じことをクエリして、クライアントのIDのみを取得したいとしますが、「194」に等しいt2.udfの値が存在しない場合に限ります。だから、私は単に得るでしょう

ID           
1234.9876    

...結果として。

4

4 に答える 4

5

結合を左結合およびファイラーにします。ここで、t2.Indexはnullです。

SELECT t1.Id
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.Id = t2.Index
AND t2.UDF = 194   -- has to be before where clause
WHERE t2.Index IS NULL
AND t1.EndDate IS NULL 
AND t1.Id = '1234.9876'  -- not sure if you want this part

NOTEXISTSを使用する別の方法

SELECT t1.Id
FROM Table1 t1
WHERE NOT EXISTS (SELECT 1 FROM  Table2 t2 WHERE t1.Id = t2.INDEX
                AND t2.UDF = 194)
AND t1.EndDate IS NULL 
AND t1.Id = '1234.9876'  

JOINSも参照してください

于 2013-03-25T20:24:16.897 に答える
0

AND t2.udfを追加することはできません(udf <> '194'であるtable2からudfを選択します)。しかし、@SQLMenaceソリューションの方が優れています

于 2013-03-25T20:26:26.953 に答える
0

これでうまくいくはずです。

SELECT DISTINCT t1.Id 
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t2.UDF NOT IN (194)
AND t2.Index IS NULL

Select DISTINCTは、他の条件を満たす一意のエントリと、最初のwhere句を提供します。

  t2.UDF NOT IN (194)

Normallは、t2.UDFが194ではないt1のすべての行を返しますが、Select Distinctによって制限され、個別のIDのみが提供されます。

于 2013-03-25T20:26:57.767 に答える
-1

次のことを試してください。

SELECT t1.Id
FROM Table1 t1
JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t1.EndDate IS NULL AND
      t1.Id = '1234.9876' AND
      t2.udf <> '194'
于 2013-03-25T20:27:39.600 に答える