0

古い問題から新しい問題に対処するために、新しいスレッドを開始する必要がありました。

元の問題はこのリンクにあります.... 値が存在しないことを確認する複雑なクエリ結合

私は2つのテーブルを持っています、最初は

Tb1 = drID, schedDate, rteID

2 つ目は次のとおりです。

Tb2  = drID, FName, LName, Active

tb1 schedDate には 11/12/2012 の値がありますが、レコードが返されません。11/01/2012 と入力すると正しいレコードが返されますが、この日付は tb1 のどのレコードにも存在しません。

SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
AND   drID NOT IN (
      SELECT drID
      FROM   Tb1
      WHERE  (drID IS NULL OR drID = '')
      AND  (schedDate = (@targetDate)
      )

両方の日付フィールドは、私がそれぞれ個別に、そして両方を一緒にキャストしようとした日付です...

AND (CAST(schedDate AS DATE) = CAST(@targetDate AS DATE))

AND (CAST(schedDate AS DATETIME) = CAST(@targetDate AS DATETIME))

提出日に tb1 に drID が存在しないことを確認しようとしています。

4

4 に答える 4

2

サブクエリに根本的な欠陥があると思います:

SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
AND   drID NOT IN (
  -- You are looking for drID's not included in the following subquery.
  SELECT drID
  FROM   Tb1
  WHERE  (drID IS NULL OR drID = '')
  AND  (schedDate = (@targetDate)
  )

サブクエリは null または '' drIDのみを返します。

  SELECT drID
  FROM   Tb1
  WHERE  (drID IS NULL OR drID = '')
  AND  (schedDate = (@targetDate)

編集:

より明確にするために、外側のクエリはすべての drID、Fname、LName を table2 から返します。この場合、アクティブ フラグが true に設定されており、サブクエリによって返されるdrID のリストに drIDは含まれていません。サブクエリが drID を返すことはありません。

サブクエリから (drID IS NULL または dirID = '') を削除します。

于 2012-12-21T19:59:52.400 に答える
0

これにより、比較の前に、2 つの日時変数から時間、分、秒、およびそれより短い時間情報が削除されます。

SELECT drID, Fname, LName
FROM   TB2
WHERE  Active = True 
AND   drID NOT IN (
      SELECT drID
      FROM   Tb1
      WHERE  (drID IS NULL OR drID = '')
      AND  (dateadd(day,datediff(day,0,schedDate),0) = 
            dateadd(day,datediff(day,0,@targetDate),0)
           )
于 2012-12-21T19:52:21.093 に答える
0

これは機能しますか?

SELECT drID, Fname, LName
FROM   TB2 left outer join tb1 on
  tb2.drid = tb1.drid and
  tb1.active = true and
  schedDate = @targetDate
WHERE  
  tb1.drid is null

失敗の原因となっているのが平等の日付テストである場合は、試すこともできます

where abs(datediff(day,@targetDate,schedDate)) < 1
于 2012-12-21T19:54:56.207 に答える