elimina da due tabelle in una query

ho due tabelle in mysql

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

ora voglio cancellare dalla tabella dei messaggi va bene. ma quando cancello il messaggio con messageid = ‘1’ per esempio è ancora presente sul messaggio degli utenti, devo cancellare da queste due tabelle contemporaneamente;

quindi uso la seguente query:

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

poi provo

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

ma queste due domande non sono accoumplish questo compito.

Non puoi semplicemente separarli da un punto e virgola?

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

O

Basta usare INNER JOIN come di seguito

 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 

traduzione: cancella dai messaggi di tabella dove messageid = 1, se i messaggi di tabella hanno messageid = messageid di messaggi di tabella, cancella quella riga di uersmessages .

Dovresti creare una FOREIGN KEY con ON DELETE CASCADE :

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

oppure esegui due query in una transazione:

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

La transazione riguarda solo le tabelle InnoDB , comunque.

Hai due opzioni:

Innanzitutto, fai due dichiarazioni all’interno di una transazione:

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

In alternativa, è ansible impostare ON DELETE CASCADE con una chiave esterna. Questo è l’approccio migliore.

 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 ); 

Puoi leggere ulteriori informazioni su ON DELETE CASCADE qui .

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

non c’è bisogno di JOIN:

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

Prova questo per favore

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

Prova questo..

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

Ho lasciato id come colonna di esempio.

Contento questo aiuta 🙂

Puoi anche usare in questo modo, per cancellare un valore particolare quando entrambe le colonne hanno 2 o più nomi della stessa colonna.

 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';