Il y a 2 tables spawnlist
et npc
, et je dois supprimer des données de spawnlsit
.
npc_templateid = n.idTemplate
est la seule chose qui "connecte" les tables. J'ai essayé ce script mais cela ne fonctionne pas.
J'ai essayé ceci:
DELETE s FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
mysql
sql
sql-server
inner-join
sql-delete
JoinOG
la source
la source
Réponses:
Ajoutez
.*
às
dans votre première ligne.Essayer:
la source
spawnlist
. Je voisl2revo.root.spawnlist
etdb.root.spawnlist
.AS
vos alias.Si la base de données est InnoDB, il pourrait être préférable d'utiliser des clés étrangères et de procéder en cascade lors de la suppression, cela ferait ce que vous voulez et n'entraînerait pas de stockage de données redondantes.
Pour cet exemple, cependant, je ne pense pas que vous ayez besoin des premiers s:
Il peut être préférable de sélectionner les lignes avant de supprimer afin d'être sûr de supprimer ce que vous souhaitez:
Vous pouvez également vérifier la syntaxe de suppression MySQL ici: http://dev.mysql.com/doc/refman/5.0/en/delete.html
la source
si la base de données est InnoDB vous n'avez pas besoin de faire des jointures lors de la suppression. seulement
peut être utilisé pour supprimer tous les enregistrements liés à des clés étrangères dans d'autres tables, pour ce faire, vous devez d'abord lier vos tables au moment du design.
si vous utilisez MyISAM, vous pouvez supprimer les enregistrements se joignant comme ceci
dans la première ligne, j'ai initialisé les deux tables temporaires pour supprimer l'enregistrement, dans la deuxième ligne, j'ai attribué la table d'existence à la fois à a et à b mais ici j'ai lié les deux tables avec le mot-clé de jointure, et j'ai fait correspondre la clé primaire et étrangère pour les deux tables qui font le lien, dans la dernière ligne, j'ai filtré l'enregistrement par champ à supprimer.
la source
type
est en fait dans l'autre table, pas dans laspawnlist
table, donc la jointure est nécessaire