我有一个简单的mysql表:
CREATE TABLE IF NOT EXISTS `pers` (
`persID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(35) NOT NULL,
`gehalt` int(11) NOT NULL,
`chefID` int(11) DEFAULT NULL,
PRIMARY KEY (`persID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `pers` (`persID`, `name`, `gehalt`, `chefID`) VALUES
(1, 'blb', 1000, 3),
(2, 'as', 1000, 3),
(3, 'chef', 1040, NULL);
我尝试运行以下更新,但仅收到错误1093:
UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL
OR gehalt <
(SELECT (
SELECT MAX(gehalt * 1.05)
FROM pers MA
WHERE MA.chefID = MA.chefID)
AS _pers
))
我搜索了错误,并从mysql http://dev.mysql.com/doc/refman/5.1/en/subquery-
restrictions.html
以下页面找到了,但这对我没有帮助。
我该怎么做才能更正sql查询?
问题在于,无论出于何种原因,MySQL都不允许您编写如下查询:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
也就是说,如果你正在做一个UPDATE
/ INSERT
/ DELETE
桌子上,你不能引用在内部查询表 (您 可以
但是从外部表引用一个字段…)
解决方案是myTable
将子查询中的实例替换为(SELECT * FROM myTable)
,如下所示
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
显然,这会导致将必需的字段隐式复制到临时表中,因此可以使用。
我在这里找到了这个解决方案。该文章的注释:
您不想
SELECT * FROM table
在现实生活中只进入子查询;我只是想使例子简单。实际上,您只应选择该最内部查询中所需的列,并添加一个良好的WHERE
子句以限制结果。
问题内容: 我试图将此解决方案应用于我的MySQL DB中具有重复项的表中的数据。我得到这样的错误: 也尝试过分配别名-但没有成功。出现此错误的原因是什么?通常指出SQL脚本可以产生循环过程,但是在这里我实际上看不到与此相关的任何东西- 很明显,for和for的两个选择是分离的-engine必须先做 一次,然后在for的条件下使用它。那么-为什么会发生此错误,以及如何真正对表进行重复数据删除呢?=
问题内容: 我收到运行以下查询的MySQL错误“您无法在FROM子句中指定目标表’任务’进行更新”: 我该如何处理? 谢谢! 问题答案: 您可以像这样将其包装在子查询中。问题是MySQL无法更新它也在查询的行。这将使MySQL隐式使用一个临时表来存储您要删除的ID。
问题内容: 我试过了: 但是它给出: #1093-您不能为子句中的更新指定目标表’giveaways’ 这篇文章似乎相关,但我无法使其适应我的查询。我如何使它工作? 问题答案: 这是因为您的更新可能是周期性的......如果更新该记录将导致事情发生这使得条件?您知道并非如此,但引擎并非如此。操作中桌子上也可能有相反的锁。 我认为您可以这样做(未经测试): 阅读更多
问题内容: 我有这个查询 和桌子看起来像这样。 当我执行此查询时,出现以下错误: 我可以创建临时表并保留子查询的结果,然后执行UPDATE。但是我不想这样做。有人可以建议我这样做的更好方法吗? 问题答案: 您正在使用别名“ a”,但从未定义过它。 也许这会工作:
问题内容: 我的数据库中有一个表,其中的条目已损坏。下一个查询返回损坏的条目: 我试图删除它们执行: 但是我得到了下一个错误: #1093-您无法在FROM子句中指定目标表’story_category’进行更新 我该如何克服? 问题答案: 更新:此答案涵盖了常规错误分类。 有关如何最好地处理OP的确切查询的更具体的答案,请参阅此问题的其他答案 在MySQL中,您不能修改在SELECT部分中使
在我的WordPress数据库中,我正在执行一个更简化的查询版本: 我一直得到以下错误: 如有任何帮助,将不胜感激。 更新#1:答案由@Rahul提供。