错误1175:从table1中删除行,其中PK与table2中的PK匹配

时间:2016-03-17 21:48:55

标签: mysql

我试图从table1中删除table2中具有匹配PK的所有行。虽然我的WHERE子句正在使用Key,但我收到错误1175。我熟悉切换安全模式,但这不应该是一个问题,因为我的WHERE子句确实包含两个表的私钥。任何有待解决的建议都将不胜感激。更多详情如下。

table1结构:

CREATE TABLE `table1` (
  `pkfield` varchar(10) NOT NULL,
  `field1` varchar(3) DEFAULT NULL,
  `field2` varchar(1) DEFAULT NULL,
  `field3` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`pkfield`),
  UNIQUE KEY `pkfield_UNIQUE` (`pkfield`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

table2结构:

CREATE TABLE `table2` (
  `pkfield` varchar(10) NOT NULL,
  PRIMARY KEY (`pkfield`),
  UNIQUE KEY `pkfield_UNIQUE` (`pkfield`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

删除查询:

DELETE table1.*, table2.* FROM table1 INNER JOIN table2
WHERE table1.pkfield=table2.pkfield;

行动输出回应:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.

谢谢。

2 个答案:

答案 0 :(得分:0)

我认为EXISTS子句可能完成你所描述的内容:

DELETE
FROM table1 t1
WHERE EXISTS 
     (SELECT 'x'
        FROM table2 t2
        where t2.pkfield = t1.pkfield)

答案 1 :(得分:0)

我在查询的WHERE部分中包含了一个模拟条件以绕过安全更新,但我仍然不知道为什么之前的条件不满足在WHERE中有PK的要求。 / p>

DELETE FROM table1 WHERE (pkfield IN (SELECT pkfield FROM table2)) and pkfield<>""

模拟条件只是检查以确认该字段不为空,它永远不会是表键。