Ответ 1
Добавьте .*
в s
в свою первую строку.
Try:
DELETE s.* FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
Есть 2 таблицы, spawnlist
и npc
, и мне нужно удалить данные из spawnlsit
.
npc_templateid = n.idTemplate
- это единственное, что "связывает" таблицы.
Я пробовал этот script, но он не работает.
Я пробовал это:
DELETE s FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
Добавьте .*
в s
в свою первую строку.
Try:
DELETE s.* FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
Если база данных - InnoDB, тогда лучше было бы использовать внешние ключи и каскад при удалении, это сделало бы то, что вы хотите, а также не должно содержать избыточных данных.
Для этого примера, однако, я не думаю, что вам нужны первые s:
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, но здесь я связал обе таблицы вместе с ключевым словом join, и я сопоставил первичный и внешний ключ для обеих таблиц, которые делают ссылку, в последней строке я отфильтровал запись по полю для удаления.