[SQL] 한 쿼리에서 두 테이블에서 삭제
SQL한 쿼리에서 두 테이블에서 삭제
나는 MySQL은 두 개의 테이블이
#messages table :
messageid
messagetitle
.
.
#usersmessages table
usersmessageid
messageid
userid
.
.
지금은 메시지 테이블에서 삭제하려면 괜찮아요. 나는 메시지 ID로 메시지를 삭제할 때 레코드가 여전히 사용자가 메시지에 존재하고 내가 한 번에이 두 테이블에서 삭제해야합니다.
나는 다음과 같은 쿼리를 사용 :
DELETE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1' ;
그럼 테스트
DELETE FROM messages , usersmessages
WHERE messages.messageid = usersmessages.messageid
and messageid='1' ;
그러나이 두 쿼리는이 작업을 달성하지 않습니다.
해결법
-
==============================
1.당신은 단지 그들을 세미콜론 (;)으로 분리 할 수 있습니까?
당신은 단지 그들을 세미콜론 (;)으로 분리 할 수 있습니까?
Delete from messages where messageid = '1'; Delete from usersmessages where messageid = '1'
또는
그냥 INNER 아래와 같은 조인을 사용
DELETE messages , usersmessages FROM messages INNER JOIN usersmessages WHERE messages.messageid= usersmessages.messageid and messages.messageid = '1'
-
==============================
2.
DELETE a.*, b.* FROM messages a LEFT JOIN usersmessages b ON b.messageid = a.messageid WHERE a.messageid = 1
번역 : 테이블 uersmessages가의 MessageID =의 MessageID 테이블 메시지가있는 경우의 MessageID = 1, uersmessages 테이블의 행을 삭제 테이블 메시지에서 삭제.
-
==============================
3.당신도 ON DELETE CASCADE와 FOREIGN KEY를 작성해야합니다 :
당신도 ON DELETE CASCADE와 FOREIGN KEY를 작성해야합니다 :
ALTER TABLE usersmessages ADD CONSTRAINT fk_usermessages_messageid FOREIGN KEY (messageid) REFERENCES messages (messageid) ON DELETE CASCADE
, 또는 트랜잭션에 두 개의 쿼리를 사용하여 수행
START TRANSACTION;; DELETE FROM usermessages WHERE messageid = 1 DELETE FROM messages WHERE messageid = 1; COMMIT;
거래는하지만, InnoDB만을 테이블에 영향을 미칩니다.
-
==============================
4.당신은 두 가지 옵션이 있습니다 :
당신은 두 가지 옵션이 있습니다 :
첫째, 트랜잭션 내부의 두 문장은 수행
BEGIN; DELETE FROM messages WHERE messageid = 1; DELETE FROM usermessages WHERE messageid = 1; COMMIT;
또는, 외래 키로 설정 DELETE CASCADE ON있을 수 있습니다. 이것은 더 나은 방법입니다.
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 );
당신은 더 여기 DELETE CASCADE ON에 대한 읽을 수 있습니다.
-
==============================
5.
DELETE message.*, usersmessage.* from users, usersmessage WHERE message.messageid=usersmessage.messageid AND message.messageid='1'
-
==============================
6.없음에 대한 필요성이 조인
없음에 대한 필요성이 조인
DELETE m, um FROM messages m, usersmessages um WHERE m.messageid = 1 AND m.messageid = um.messageid
-
==============================
7.이 제발 시도
이 제발 시도
DELETE FROM messages,usersmessages USING messages INNER JOIN usermessages on (messages.messageid = usersmessages.messageid) WHERE messages.messsageid='1'
-
==============================
8.영업 이익은 삭제 후 테이블 별칭이 없습니다
영업 이익은 삭제 후 테이블 별칭이 없습니다
DELETE t1, t2 FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id WHERE t1.id = some_id
-
==============================
9.이 시도..
이 시도..
DELETE a.*, b.* FROM table1 as a, table2 as b WHERE a.id=[Your value here] and b.id=[Your value here]
나는 샘플 컬럼으로 ID를 할 수 있습니다.
다행이 도움이됩니다. :)
-
==============================
10.당신은 또한 모두 열이가 있거나 동일한 열 이름의 많은 경우 특정 값을 삭제하려면, 다음과 같이 사용할 수 있습니다.
당신은 또한 모두 열이가 있거나 동일한 열 이름의 많은 경우 특정 값을 삭제하려면, 다음과 같이 사용할 수 있습니다.
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';
-
==============================
11.당신이 아래 삭제할> 행 - 여기에 언급되지 않은 다른 방법이, 모든 테이블에 대한 배열을 설정할 수 있습니다 (I은 아직 완전히 그것의 성능을 테스트하지 않았다)
당신이 아래 삭제할> 행 - 여기에 언급되지 않은 다른 방법이, 모든 테이블에 대한 배열을 설정할 수 있습니다 (I은 아직 완전히 그것의 성능을 테스트하지 않았다)
// set your tables array $array = ['table1', 'table2', 'table3']; // loop through each table for($i = 0; $i < count($array); $i++){ // get each single array $single_array = $array[$i]; // build your query $query = "DELETE FROM $single_array WHERE id = 'id'"; // prepare the query and get the connection $data = con::GetCon()->prepare($query); // execute the action $data->execute(); }
당신은 홈 페이지로 사용자를 리디렉션 할 수 있습니다.
header('LOCATION:' . $home_page);
이 의지 도움말 사람을 희망 :)
감사
from https://stackoverflow.com/questions/1233451/delete-from-two-tables-in-one-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] WHERE COL IN (...) 조건에 대한 제한 (0) | 2020.03.19 |
---|---|
[SQL] MySQL의 함수는 두 날짜 사이의 작업 일 수를 찾을 수 (0) | 2020.03.19 |
[SQL] 어떻게 SQL Server의 날짜에 BIGINT (UNIX 타임 스탬프)를 변환 할 수 있습니까? (0) | 2020.03.18 |
[SQL] 여러 값을 하나의 INSERT 대 여러 INSERT 문 (0) | 2020.03.18 |
[SQL] SQLite는 INSERT - ON DUPLICATE KEY UPDATE (UPSERT) (0) | 2020.03.18 |