2017-09-27 3 views
2

Voici le tableau ÉLÈVES:Comment puis-je supprimer des enregistrements en double si l'un des enregistrements a un champ NULL?

UID  NAME SPECIALTY 

123456 John Writing 
123456 John NULL 
234567 Jane Acting 
234567 Jane NULL 
345678 Bob  Writing 
345678 Bob  NULL 

Je veux exécuter une requête où il supprimera tous les enregistrements avec un UID double et un NULL spécialisé. J'utilise ColdFusion, MSQL 2012.

Merci.

+0

si tous les enregistrements pour un UID ont NULL SPWCIALTY? Est-ce que tout est supprimé, tous sauf un ou aucun? Par exemple, Bob a 2 NULL – Shawn

+0

Oups. 'SPÉCIALITÉ '. – Shawn

Répondre

3

Pouvez-vous faire quelque chose comme:

delete 
    from students s1 
where specialty is null 
    and exists(select 1 
       from students s2 
       where specialty is not null 
       and s2.uid = s1.uid); 

Ceci est une sous-requête dans Oracle corrélative. Pas sûr de votre environnement.

+0

La question est étiquetée sql-server. Cependant, cette réponse fonctionne dans ce système. –

+0

Merci, je me doutais que cela fonctionnerait pour le serveur SQL, mais n'était pas sûr. – JimB

+0

J'utilise le générateur ColdFusion pour exécuter ces commandes. Si je fais ceci: SELECT * DE dbo.students s1 OU spécialité est nulle ET EXISTE ( \t SELECT * \t DE dbo.students s2 \t OU spécialité est non nulle \t ET s2.uid = s1. \t) Je peux voir les enregistrements que je veux supprimer. Toutefois, si je fais ceci: SUPPRIMER DE dbo.students s1 OU spécialité est nulle ET EXISTE ( \t SELECT 1 \t DE dbo.students s2 \t OU spécialité est non nulle \t ET s2.uid = s1.uid \t) Je reçois une erreur indiquant "Syntaxe incorrecte près de s1" – airpolgas

1

Essayez la requête suivante dans le serveur MS-SQL,

DELETE FROM 
    students 
WHERE 
    specialty IS NULL 
    AND UID IN (
     SELECT 
      UID 
     FROM 
      students 
     GROUP BY 
      UID 
     HAVING 
      COUNT(*) > 1 
    ) 
+1

Danger ici si un étudiant a 2 enregistrements avec une spécialité nulle (et aucun enregistrement avec une spécialité) - les deux enregistrements seront supprimés. – JimB

+0

C'est une interprétation possible de l'exigence telle qu'indiquée dans la question. –

+0

@JimB C'est l'exigence de l'utilisateur "* supprimer tous les enregistrements avec un UID en double et une spécialité NULL *". –