Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 通过匹配两个表来删除条目_Mysql_Sql - Fatal编程技术网

Mysql 通过匹配两个表来删除条目

Mysql 通过匹配两个表来删除条目,mysql,sql,Mysql,Sql,我有两个表,我需要通过两次检查删除表A的内容。 我应该像这样工作: 从character_子类中的class_索引不是0或class_索引不是dual_class 1的character_技能中删除。 我尝试过: DELETE FROM character_skills WHERE class_index != 0 AND class_index IN (SELECT class_index FROM character_subclasses WHERE dual_class = 0);

我有两个表,我需要通过两次检查删除表A的内容。 我应该像这样工作: 从character_子类中的class_索引不是0或class_索引不是dual_class 1的character_技能中删除。 我尝试过:

DELETE FROM character_skills
WHERE class_index != 0
  AND class_index IN (SELECT class_index FROM character_subclasses WHERE dual_class = 0);
但这样他就忽略了双_类检查,并删除了字符_技能中所有不是0的条目

有人有主意吗

我尝试了两个版本,但他仍然删除了所有非0的角色技能

这就是我的表格结构:

当您有多个表时,您应该限定所有列引用。此查询:

DELETE cs FROM character_skills cs
    WHERE cs.class_index <> 0 AND
          cs.class_index IN (SELECT csc.class_index
                             FROM character_subclasses csc
                             WHERE csc.dual_class = 0
                            );

我应该照你说的做。但是,如果character_子类没有名为class_index的列,则此操作将失败。您的版本中的查询将删除所有行。

在MSSQL中检查此项,它可以工作:

DELETE FROM character_skills cs
INNER JOIN character_subclasses csu ON cs.class_index =csu.class_index 
WHERE cs.class_index <> 0 and dual_class = 0

运行select单机版并查看它返回的内容…如果我使用select运行它,他会显示所有未尝试0类索引的入口。仍然删除character\u skills中不为0的所有条目。从character\u skills中删除cs.class\u index=csu.class\u index上的cs.class\u子类csu,其中cs.class\u index 0和dual\u class=0>1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第1行>时间:0ssorry我认为它是sql服务器。我将编辑此评论。在MSSQL中,它将工作。