我试图从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.
谢谢。
答案 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<>""
模拟条件只是检查以确认该字段不为空,它永远不会是表键。