supprimer de deux tables dans une requête

j’ai deux tables en mysql

#messages table : messageid messagetitle . . #usersmessages table usersmessageid messageid userid . . 

Maintenant, je veux supprimer du tableau des messages, ça va. mais quand je supprime le message avec messageid = ‘1’ par exemple, il existe toujours sur le message utilisateur que je dois supprimer de ces deux tables à la fois;

donc j’utilise la requête suivante:

 DELTE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1' ; 

alors je teste

  DELETE FROM messages , usersmessages WHERE messages.messageid = usersmessages.messageid and messageid='1' ; 

mais ces deux requêtes ne constituent pas cette tâche.

Ne pouvez-vous pas les séparer par un point-virgule?

 Delete from messages where messageid = '1'; Delete from usersmessages where messageid = '1' 

OU

Utilisez simplement INNER JOIN comme ci-dessous

 DELETE messages , usersmessages FROM messages INNER JOIN usersmessages WHERE messages.messageid= usersmessages.messageid and messages.messageid = '1' 
 DELETE a.*, b.* FROM messages a LEFT JOIN usersmessages b ON b.messageid = a.messageid WHERE a.messageid = 1 

traduction: supprimer des messages de la table où messageid = 1, si la table uersmessages a messageid = messageid des messages de la table, supprimez cette ligne de la table uersmessages .

Vous devez soit créer une FOREIGN KEY avec ON DELETE CASCADE :

 ALTER TABLE usersmessages ADD CONSTRAINT fk_usermessages_messageid FOREIGN KEY (messageid) REFERENCES messages (messageid) ON DELETE CASCADE 

ou faites-le en utilisant deux requêtes dans une transaction:

 START TRANSACTION;; DELETE FROM usermessages WHERE messageid = 1 DELETE FROM messages WHERE messageid = 1; COMMIT; 

La transaction concerne uniquement les tables InnoDB .

Vous avez deux options:

D’abord, effectuez deux instructions dans une transaction:

 BEGIN; DELETE FROM messages WHERE messageid = 1; DELETE FROM usermessages WHERE messageid = 1; COMMIT; 

Ou, vous pouvez avoir ON DELETE CASCADE configuré avec une clé étrangère. C’est la meilleure approche.

 CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE child ( id INT, parent_id INT, FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ); 

Vous pouvez en savoir plus sur ON DELETE CASCADE ici .

 DELETE message.*, usersmessage.* from users, usersmessage WHERE message.messageid=usersmessage.messageid AND message.messageid='1' 

pas besoin de JOINS:

 DELETE m, um FROM messages m, usersmessages um WHERE m.messageid = 1 AND m.messageid = um.messageid 

Essayez ceci s’il vous plait

 DELETE FROM messages,usersmessages USING messages INNER JOIN usermessages on (messages.messageid = usersmessages.messageid) WHERE messages.messsageid='1' 

Essaye ça..

 DELETE a.*, b.* FROM table1 as a, table2 as b WHERE a.id=[Your value here] and b.id=[Your value here] 

Je laisse l’ id tant que colonne échantillon.

Heureux que cela aide. 🙂

Vous pouvez également utiliser comme ça pour supprimer une valeur particulière lorsque les deux colonnes ont 2 ou plusieurs noms de colonnes identiques.

 DELETE project , create_test FROM project INNER JOIN create_test WHERE project.project_name='Trail' and create_test.project_name ='Trail' and project.uid= create_test.uid = '1';