it-swarm.com.de

löschen Sie aus zwei Tabellen in einer Abfrage

ich habe zwei Tabellen in MySQL 

#messages table  : 
messageid
messagetitle 
.
.

#usersmessages table 
usersmessageid 
messageid
userid
.
.

jetzt möchte ich aus der nachrichtentabelle löschen, es ist ok. aber wenn ich message mit messageid = '1' lösche, ist es zum Beispiel immer noch auf usersmessage vorhanden, und ich muss diese beiden Tabellen gleichzeitig löschen. 

also verwende ich die folgende Abfrage: 

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

dann teste ich 

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

diese beiden Abfragen erfüllen diese Aufgabe jedoch nicht. 

55
mehdi

Können Sie sie nicht einfach durch ein Semikolon trennen?

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

ODER

Verwenden Sie einfach INNER JOIN wie unten

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

Übersetzung: Löschen aus der Tabelle messages wobei messageid = 1, wenn die Tabelle uersmessages die messageid = messageid der Tabelle messages hat, löschen Sie diese Zeile der Tabelle uersmessages

38
angry kiwi

Sie sollten entweder einen FOREIGN KEY mit ON DELETE CASCADE erstellen:

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

oder machen Sie es mit zwei Abfragen in einer Transaktion:

START TRANSACTION;;

DELETE
FROM    usermessages
WHERE   messageid = 1

DELETE
FROM    messages
WHERE   messageid = 1;

COMMIT;

Die Transaktion betrifft jedoch nur InnoDB-Tabellen.

11
Quassnoi

Sie haben zwei Möglichkeiten:

Führen Sie zunächst zwei Anweisungen in einer Transaktion aus:

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

Oder Sie haben ON DELETE CASCADE mit einem Fremdschlüssel eingerichtet. Dies ist der bessere Ansatz.

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

Mehr über ON DELETE CASCADE hier erfahren Sie hier.

7
Mike Trpcic
DELETE message.*, usersmessage.* from users, usersmessage WHERE message.messageid=usersmessage.messageid AND message.messageid='1'
6
johan

keine Notwendigkeit für JOINS: 

DELETE m, um FROM messages m, usersmessages um

WHERE m.messageid = 1 

AND m.messageid = um.messageid 
4
Fred Yates

Versuchen Sie dies bitte 

DELETE FROM messages,usersmessages

USING messages

INNER JOIN usermessages on (messages.messageid = usersmessages.messageid)

WHERE messages.messsageid='1'
1
Amit

Versuche dies..

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

Ich lasse id als Beispielspalte.

Schön, dass das hilft. :) 

0

Sie können auch wie folgt verwenden, um bestimmte Werte zu löschen, wenn beide Spalten 2 oder viele Spalten desselben Namens haben.

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

DELETE t1, t2 FROM table1 t1 LEFT JOIN table2 t2 ON t1 .id = t2 .id WHERE t1.id = some_id

0