SQL Supprimer des Lignes en Fonction d'une Autre Table
C'est probablement très facile, mais c'est lundi matin. J'ai deux tables:
Table1:
Field | Type | Null | Key | Default | Extra
id | int(32) unsigned | NO | PRI | NULL | auto_increment
group | int(32) | NO | | 0 |
Table2:
Field | Type | Null | Key | Default | Extra
group | int(32) | NO | | 0 |
En ignorant les autres...je voudrais une seule SQL DELETE qui va supprimer toutes les lignes dans le tableau 1 pour lequel il existe un Table2.groupe égale à la Table1.groupe. Donc, si une ligne de la table Table1 a group=69, cette ligne devrait être supprimé si et seulement si il existe une ligne dans Table2 avec le groupe=69.
Merci pour toute aide.
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est ce que vous voulez:
Je pense que cette méthode est plus rapide:
innodb_buffer_pool_size
. Cette première a échoué au bout de 30 minutes d'exécution pour moi, donc j'ai augmenté à 512 mo et ont réussi à enlever quelques 13 millions d'enregistrements. Les tables je suis entrée à hauteur de 44 millions et 23 millions de disques, respectivement, à leur ordre dans la requête.La solution nice est d'écrire du SQL comme vous le dites vous-même déjà:
Ce qui concerne,
Arno Brinkman
LIMIT 1
à:EXISTS(SELECT 1 FROM Table2 WHERE Table2.Group = Table1.Group LIMIT 1)
aider?Quelque chose comme cela
Sur le dessus de ma tête:
Je l'ai fait un peu différemment que d'autres affiches -- je pense que si il y a un grand nombre de lignes sur Table2 cela pourrait être mieux. Quelqu'un peut-il svp me droite sur qui?
vous pouvez supprimer des lignes de la table à l'aide de son alias dans une simple requête de jointure comme
ici, vous pouvez spécifier un ou sur b pour supprimer la table des lignes