복붙노트

[SQL] 가입 INNER와 DELETE SQL은

SQL

가입 INNER와 DELETE 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");

해결법

  1. ==============================

    1.추가합니다. * s의 첫 번째 줄에.

    추가합니다. * s의 첫 번째 줄에.

    시험:

    DELETE s.* FROM spawnlist s
    INNER JOIN npc n ON s.npc_templateid = n.idTemplate
    WHERE (n.type = "monster");
    
  2. ==============================

    2.데이터베이스가 이노 인 경우 다음이 당신이 원하는 것을 할 것 삭제에 외래 키와 폭포를 사용하고 또한 중복되는 데이터가 저장되지 당할 위험이 더 좋은 생각이 될 수 있습니다.

    데이터베이스가 이노 인 경우 다음이 당신이 원하는 것을 할 것 삭제에 외래 키와 폭포를 사용하고 또한 중복되는 데이터가 저장되지 당할 위험이 더 좋은 생각이 될 수 있습니다.

    이 예를 들어,하지만 난 당신이 첫번째들 필요가 있다고 생각하지 않습니다 :

    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

  3. ==============================

    3.데이터베이스가 InnoDB의 경우, 당신은 할 필요가 삭제 조인니까. 뿐

    데이터베이스가 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';
    

    첫 번째 줄에 내가 delet 기록을 위해 두 개의 임시 테이블을 초기화 한 두 번째 줄에 내가 모두 a와 b에 실존 테이블을 할당하지만, 여기에 내가 키워드에 가입과 함께 두 테이블을 연결 한 그리고 난, 링크를 만들 두 테이블의 기본 키와 외래 키를 일치 한 마지막 줄에 내가 삭제할 필드를 기준으로 레코드를 필터링했다.

  4. from https://stackoverflow.com/questions/8598791/sql-delete-with-inner-join by cc-by-sa and MIT license