2011-03-25 4 views
4
DELETE a,b 
FROM a AS a 
INNER JOIN b AS b ON a.b_id = b.id 
WHERE a.id IN (1,2,3,4) 

La requête ci-dessus ne supprime que 1 enregistrements, pourquoi? Je veux supprimer tous les 4 enregistrementsMysql - supprimer plusieurs tables

+0

(+1) bonne question. –

Répondre

-1
commande

ne fonctionne pas DELETE avec JOIN

+0

Je l'exécute et ne reçois aucun avis d'erreur, mais il supprime seulement le premier enregistrement dans les deux tableaux? Quelle est la bonne façon? – Chameron

+0

essayez ceci: SUPPRIMER a. *, B. * ou: SUPPRIMER * –

1

J'ai créé un échantillon de test comme suit:

Test d'usage
TABLE DROP IF EXISTS a;
TABLE DE GOUTTE SI EXISTE b;
CRÉER TABLE a (ID INT NON NULL PRIMARY KEY);
CREATE TABLE b (ID INT NON NULL PRIMARY KEY);
INSÉRER DANS LES VALEURS (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
INSÉREZ DANS b VALEURS (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
SELECT * FROM a;
SELECT * FROM b; SUPPRIMER a. * A PARTIR D'UN JOINDRE INTÉRIEUR b SUR a.id = b.id O WH a.id IN (1,2,3,4);
SELECT * FROM a;

Voici mes résultats:

lwdba @ localhost (test DB) :: test d'utilisation
Base de données a changé
lwdba @ localhost (test DB) :: DROP TABLE IF EXISTS a;
Recherche OK, 0 lignes affectées (0,06 sec)

lwdba @ localhost (test DB) :: DROP TABLE IF EXISTS b;
Recherche OK, 0 lignes affectées (0,06 sec)

lwdba @ localhost (test DB) :: CREATE TABLE a (id INT NOT NULL clé primaire);
Recherche OK, 0 lignes affectées (0,23 sec)

lwdba @ localhost (test DB) :: CREATE TABLE b (id INT NOT NULL clé primaire);
Query OK, 0 lignes affectées (0,17 sec)

lwdba @ localhost (test DB) :: insérer dans une VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
Recherche OK, 10 lignes affectées (0,06 sec)
Records: 10 Doublons: 0 Avertissements: 0

lwdba @ localhost (test DB) :: INSERT INTO b (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
Interrogation OK, 10 lignes affectées (0.06 sec)
Records: 10 Doublons: 0 Avertissements: 0

lwdba @ localhost (test DB) :: SELECT * FROM un;
+ ---- +
| id |
+ ---- +
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
10 rows in set (0.00 sec)

lwdba @ localhost (test DB) :: SELECT * FROM b;
+ ---- +
| id |
+ ---- +
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
10 lignes set (0.00 sec)

lwdba @ localhost (test DB) :: SUPPRIMER a, b D'un INNER JOIN b = ON a.id b.id OÙ un.id IN (1,2,3,4); Requête OK, 4 lignes affectées (0,08 sec)

lwdba @ localhost (test DB) :: SELECT * FROM a;
+ ---- +
| id |
+ ---- +
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
6 rows in set (0.00 sec)

lwdba @ localhost (test DB) :: SELECT * FROM b;
+ ---- +
| id |
+ ---- +
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
6 rows in set (0.00 sec)

Lui donner un essai !!!

BTW j'ai enlevé "AS a" et "b AS" de votre requête et j'ai changé a.b_id à a.id

+0

hehe merci, j'ai une erreur dans ma requête (mais dans ma question c'est correct: D). IN ('1,2,3,4') à la place IN (1,2,3,4). Vous supprimez uniquement dans un tableau? DELETE a. * – Chameron

+0

J'ai essayé mon exemple avec DELETE a au lieu de DELETE a. *. Cela a fonctionné aussi bien! En fait, j'ai remis DELETE a, b et l'ai lancé. Il a en effet supprimé des tables a et b. J'ai mis à jour ma réponse pour refléter cela. Merci, je fais maintenant confiance à DELETE pour supprimer de deux tables en même temps !!! – RolandoMySQLDBA

+0

Vous obtenez +1 sur votre question pour m'apprendre quelque chose aujourd'hui. – RolandoMySQLDBA