我有這個查詢,但由於某種原因,StartDate值沒有得到過濾。它出什麼問題了?請告訴我。SQL查詢不存在
SELECT *
FROM TableA A
WHERE NOT EXISTS(SELECT * FROM TableB B
WHERE A.pId = B.pId and A.StartDate >= '20-JUN-10')
我有這個查詢,但由於某種原因,StartDate值沒有得到過濾。它出什麼問題了?請告訴我。SQL查詢不存在
SELECT *
FROM TableA A
WHERE NOT EXISTS(SELECT * FROM TableB B
WHERE A.pId = B.pId and A.StartDate >= '20-JUN-10')
如果起始日期是VARCHAR列,那麼你不能指望做的比它更大的比較時,得到正確的結果。實際上,你是說任何存儲在StartDate列中的值都不應該在'20 -JUN-10'之後或之後排序。你應該讓StartDate成爲一個實際的DateTime。所以,直到你這樣做,你應該把它轉換爲DateTime和,因爲它只是引用外部表,你可以拉出來的子查詢:
Select ..
From TableA As A
Where (A.StartDate Is Null Or Cast(A.StartDate As DateTime) < '2010-06-20')
And Not Exists (
Select 1
From TableB As B
Where B.pid = A.pid
)
這起始日期是不是一個實際的DateTime是一個基本數據完整性問題,並與我想象的其他人一起產生這個問題。但是,如果由於某種瘋狂的原因,你都不能轉換爲日期時間在你的起始日期列中的值,那麼你需要添加另一個檢查(及掌摑原DBA上攻於目):
Select ..
From TableA As A
Where (A.StartDate Is Null
Or (IsDate(A.StartDate) = 1 And Cast(A.StartDate As DateTime) < '2010-06-20'))
And Not Exists (
Select 1
From TableB As B
Where B.pid = A.pid
)
您的意思是?
SELECT *
FROM TableA A
WHERE A.StartDate >= '20-JUN-10'
AND NOT EXISTS(SELECT * FROM TableB B WHERE A.pId = B.pId)
把條件與StartDate
入NOT EXISTS
-clause應該返回那些行,其中這個標準是不匹配。
在猜測,你可能需要修改你的括號:
SELECT * FROM TableA A
WHERE NOT EXISTS(SELECT * FROM TableB B WHERE A.pId = B.pId)
and A.StartDate >= '20-JUN-10'
的日期使用ISO格式,所以不是'20 -Jun-10' 使用‘20100610’假定它是一個日期時間/日期列
什麼是你的DBMS ?什麼是StartDate列類型? 多一點信息會幫助很多... – 2010-07-06 14:04:26
它可能與您的StartDate列的類型有關,這是什麼數據類型? – 2010-07-06 14:06:25
這是一個Varchar數據類型。我正在使用SQL Server 2005. – nav100 2010-07-06 14:11:46