INNER JOIN으로 SQL 삭제
이 두 테이블이있다, spawnlist
그리고 npc
, 나는 데이터를 삭제해야합니다 spawnlsit
. npc_templateid = n.idTemplate
테이블을 "연결"하는 유일한 방법입니다. 이 스크립트를 시도했지만 작동하지 않습니다.
나는 이것을 시도했다 :
DELETE s FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
추가 .*
로 s
당신의 첫 번째 줄에.
시험:
DELETE s.* FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
데이터베이스가 InnoDB 인 경우 삭제시 외래 키와 캐스케이드를 사용하는 것이 좋습니다. 이렇게하면 원하는 작업이 수행되고 중복 데이터가 저장되지 않습니다.
그러나이 예제에서는 첫 번째 것이 필요하다고 생각하지 않습니다.
DELETE s
FROM spawnlist AS s
INNER JOIN npc AS n ON s.npc_templateid = n.idTemplate
WHERE n.type = "monster";
삭제하기 전에 행을 선택하여 원하는 것을 삭제하는 것이 좋습니다.
SELECT * FROM spawnlist
INNER JOIN npc ON spawnlist.npc_templateid = npc.idTemplate
WHERE npc.type = "monster";
여기에서 MySQL 삭제 구문을 확인할 수도 있습니다. http://dev.mysql.com/doc/refman/5.0/en/delete.html
데이터베이스가 InnoDB 인 경우 삭제시 조인을 수행 할 필요가 없습니다. 뿐
DELETE FROM spawnlist WHERE spawnlist.type = "monster";
다른 테이블에서 외래 키와 연결된 모든 레코드를 삭제하는 데 사용할 수 있으므로 디자인 타임에 테이블을 먼저 연결해야합니다.
CREATE TABLE IF NOT EXIST spawnlist (
npc_templateid VARCHAR(20) NOT NULL PRIMARY KEY
)ENGINE=InnoDB;
CREATE TABLE IF NOT EXIST npc (
idTemplate VARCHAR(20) NOT NULL,
FOREIGN KEY (idTemplate) REFERENCES spawnlist(npc_templateid) ON DELETE CASCADE
)ENGINE=InnoDB;
MyISAM을 사용하면 이와 같은 레코드를 삭제할 수 있습니다
DELETE a,b
FROM `spawnlist` a
JOIN `npc` b
ON a.`npc_templateid` = b.`idTemplate`
WHERE a.`type` = 'monster';
첫 번째 줄에서 레코드를 삭제하기 위해 두 개의 임시 테이블을 초기화했으며 두 번째 줄에서 존재 테이블을 a와 b 모두에 할당했지만 두 테이블을 조인 키워드와 함께 연결했으며 기본 및 외래 키와 일치했습니다. 링크를 만드는 두 테이블 모두 마지막 줄에서 레코드별로 필드를 필터링하여 삭제했습니다.
참고 URL : https://stackoverflow.com/questions/8598791/sql-delete-with-inner-join
'program tip' 카테고리의 다른 글
shebang과 함께 awk에 여러 인수를 사용하는 방법 (예 : #!)? (0) | 2020.07.25 |
---|---|
dict를 OrderedDict로 변환 (0) | 2020.07.25 |
Apache HttpClient 4.0에서 SSL 인증서 오류를 무시하는 방법 (0) | 2020.07.24 |
Spring Security를 사용하여 Java 코드에서 "hasRole"을 확인하는 방법은 무엇입니까? (0) | 2020.07.24 |
Ratingbar의 크기를 어떻게 줄일 수 있습니까? (0) | 2020.07.24 |