2017-06-28 3 views
-1

J'ai une table sql avec les documents suivants:commande SQL compliquée

+------+----------+ 
| user | dob | 
+------+----------+ 
| john | 1/10/96 | 
| jane | 3/4/97 | 
| jill | 1/8/96 | 
| jack | 2/9/00 | 
| jane | 12/14/07 | 
| john | 1/11/98 | 
+------+----------+ 

Voici la commande que je veux exécuter: supprimer tous les utilisateurs avec DOB < 1/1/00 mais gardez un utilisateur s'il existe une autre utilisateur avec le même nom dont dob> = 1/1/00.

Dans cet exemple, johns et jill seraient supprimés et les janes et jack resteraient. Comment est-ce que je traduis la commande ci-dessus dans SQL?

+0

Voir: [? Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une simple requête SQL] (https://meta.stackoverflow.com/questions/333952/pourquoi-devrais-je-fournir-un-mcve-pour-ce-qui-me-semble-à-être-un-très-simple-sql-query) – Strawberry

+0

@Strawberry, ce que vous dites est valide mais c'est doesn Ne veux pas dire que vous allez continuer à downvoting la bonne réponse ... non? – Rahul

+0

Pourquoi Jack serait-il supprimé? – Strawberry

Répondre

0

Utilisez WHERE EXISTS comme

delete from `user` u 
where dob < '1/1/00' 
and exists (select 1 from `user` 
       where name = u.name and dob >= '1/1/00'); 
+0

'SELECT '1/11/00' <'1/2/00'' -> true – Strawberry

+0

J'ai essayé la réponse ci-dessus et MySQL me dit que ma syntaxe est fausse. @Rahul pouvez-vous s'il vous plaît expliquer ce que chaque ligne de cette commande fait afin que je puisse déboguer? – Brinley