Si StartDate est une colonne varchar, alors vous ne pouvez pas vous attendre à obtenir des résultats corrects lorsque vous faites des comparaisons plus que sur elle. En effet, vous dites que toutes les valeurs qui seraient stockées dans la colonne StartDate ne devraient pas être triées après ou sur '20 -JUN-10 '. Vous devriez faire de StartDate un DateTime réel. Donc, jusqu'à ce que vous faites cela, vous devriez jeter un DateTime et puisqu'il fait référence que la table externe, vous pouvez le retirer de la sous-requête:
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
)
Ce StartDate n'est pas une DateTime réelle est un élément fondamental problème de l'intégrité des données et crée ce problème avec une foule d'autres que j'imagine. Cependant, si pour une raison folle vous avez des valeurs qui ne peuvent être exprimées à un DateTime dans votre colonne StartDate, alors vous devez ajouter un autre chèque (et claque la hausse DBA originale la tête):
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
)
Quelle est votre SGBD ? Quel est le type de colonne StartDate? Un peu plus d'informations aiderait beaucoup ... –
Cela peut avoir à faire avec le type de votre colonne StartDate, quel est le type de données pour cela? –
C'est un type de données Varchar. J'utilise SQL Server 2005. – nav100