Requête pour supprimer des lignes où les colonnes correspondent ou sont NULL

Cela semble simple, mais je n'ai rien trouvé. Toute aide est appréciée.

J'ai une table avec plusieurs colonnes. J'ai besoin de comparer quelques-unes de ces colonnes entre elles et de supprimer les lignes où elles se correspondent ou sont NULL. Pour le dire autrement, je dois laisser les lignes seulement là où il y a des différences autres que NULL. (Si c'est important, je vais l'exécuter plusieurs fois sur des tables avec un nombre différent de colonnes comparées, parfois beaucoup de colonnes, donc les requêtes qui se concentrent sur trois colonnes ne fonctionneront pas.)

Donc, si ma table est:

ID TITLE VALUE_1 VALUE_2 VALUE_3 1 One AAA NULL NULL 2 Two NULL AAA AAA 3 Three AAA AAA AAA 4 Four NULL NULL NULL 5 Five AAA BBB CCC 6 Six AAA BBB NULL 7 Seven NULL DDD EEE 8 Eight AAA AAA BBB 

Après avoir exécuté la requête, je voudrais avoir

 ID TITLE VALUE_1 VALUE_2 VALUE_3 5 Five AAA BBB CCC 6 Six AAA BBB NULL 7 Seven NULL DDD EEE 8 Eight AAA AAA BBB 

Merci encore pour votre time.

 select * from table where v1 <> v2 or v1 <> v3 or v2 <> v3 

Cela returnnera les lignes où il y aura TRUE pour n'importe quelle paire. Donc entourant ce prédicat avec NOT IN donnera l'set désiré pour supprimer:

 delete t where id not in(select id from t where v1 <> v2 or v1 <> v3 or v2 <> v3) 

Voici le violon http://sqlfiddle.com/#!3/ea7172/8

  Delete from tablename where (Value_1 is Null And value_2 is null) or (Value_2 is Null And value_3 is null) or (Value_1 is Null And value_3 is null) or (Value_1 = value_2) or (Value_1 = value_3) or (Value_3 = value_2) 

Cela devrait être capable de supprimer s'il y a deux colonnes de null, ou n'importe quelle correspondance de deux colonnes. Il n'y a pas de fonction de comparaison de strings dans le server sql au cas où vous vous requestz

Vous pouvez utiliser un ISNULL comme ceci dans votre instruction DELETE

Where IsNull (Value_1, 'SomeValueThatWillNeverBeInTheTable') = IsNull (Value_2, 'SomeValueThatWillNeverBeInTheTable')