j'ai deux tables dans mysql
#messages table :
messageid
messagetitle
.
.
#usersmessages table
usersmessageid
messageid
userid
.
.
maintenant, je veux supprimer de la table des messages, c'est ok. mais quand je supprime le message avec messageid = '1' par exemple, il existe toujours sur usersmessage 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 permettent pas d'accomplir 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
Il suffit d'utiliser 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
translation: delete from table messages where messageid = 1, si table uersmessages has messageid = messageid de table messages , supprime cette ligne de uersmessages table.
Vous devez soit créer un FOREIGN KEY
avec ON DELETE CASCADE
:
ALTER TABLE usersmessages
ADD CONSTRAINT fk_usermessages_messageid
FOREIGN KEY (messageid)
REFERENCES messages (messageid)
ON DELETE CASCADE
, ou le faire 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 n'affecte que les tables InnoDB
, cependant.
Vous avez deux options:
Commençons par faire deux déclarations dans une transaction:
BEGIN;
DELETE FROM messages WHERE messageid = 1;
DELETE FROM usermessages WHERE messageid = 1;
COMMIT;
Ou, vous pourriez 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 plaît
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 id
comme exemple de colonne.
Content que cela aide. :)
Vous pouvez également utiliser comme ceci, pour supprimer une valeur particulière lorsque les deux colonnes ont 2 noms identiques ou plus.
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';
SUPPRIMER t1, t2 DE table1
t1 LEFT JOIN _table2
t2 SUR t1 .id
= t2 .id
O t1.id = un_id