我想在进行更新查询时选择一个表,但我收到错误代码 1093
Posted
技术标签:
【中文标题】我想在进行更新查询时选择一个表,但我收到错误代码 1093【英文标题】:I want to select a table when doing an update query but I get error code 1093 【发布时间】:2022-01-04 21:33:33 【问题描述】:我写了下面的查询,我想将标题 1001 的价格更改为最近出版的书籍的价格。但是,我一直收到错误,我一直在尝试找到解决该错误的方法,因为我知道我收到了错误,因为我无法修改您在选择部分中使用的同一个表。
SQL 查询:
update titles
set price = (select price from titles where pubDate = (select max(pubdate) from titles))
where titleID = 1001
错误代码:1093。您不能在 FROM 子句中指定目标表 'titles' 进行更新
titles 表包含 titleID、title、pubID、subId、pubDate、cover 和 price 列。
有谁知道执行此更新查询的另一种方法?
【问题讨论】:
【参考方案1】:您可以使用事务块。
模拟错误:
mysql> create table testUpdate(no int, txt varchar(20));
Query OK, 0 rows affected (0.04 sec)
MySQL [re_ram]> insert into testUpdate values(1,'one');
Query OK, 1 row affected (0.00 sec)
MySQL > insert into testUpdate values(2,'two');
Query OK, 1 row affected (0.01 sec)
MySQL > insert into testUpdate values(3,'three');
Query OK, 1 row affected (0.01 sec)
MySQL > insert into testUpdate values(4,'four');
Query OK, 1 row affected (0.01 sec)
MySQL > insert into testUpdate values(5,'five');
Query OK, 1 row affected (0.01 sec)
MySQL > select * from testUpdate;
+------+-------+
| no | txt |
+------+-------+
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
| 5 | five |
+------+-------+
5 rows in set (0.00 sec)
MySQL > update testUpdate set txt=(select txt from testUpdate where no=(. elect min(no) from testUpdate)) where no=5;
ERROR 1093 (HY000): You can't specify target table 'testUpdate' for update
in FROM clause
解决方法是使用事务块:
start transaction;
select txt into @txt from testUpdate where no=(select min(no) from testUpdate);
update testUpdate set txt=@txt where no=5;
commit;
输出:
MySQL > start transaction;
Query OK, 0 rows affected (0.05 sec)
MySQL > select txt into @txt from testUpdate where no=(select min(no) from testUpdate);
Query OK, 1 row affected (0.00 sec)
MySQL > update testUpdate set txt=@txt where no=5;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0
MySQL > commit;
Query OK, 0 rows affected (0.00 sec)
【讨论】:
以上是关于我想在进行更新查询时选择一个表,但我收到错误代码 1093的主要内容,如果未能解决你的问题,请参考以下文章
我收到此错误:当未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式
我正在尝试在用户输入时查询firebase数据库,但我一直收到此错误
我想在 iTunes Connect 中将我的通用应用程序更新为仅限 iPad 的应用程序。但是在提交二进制文件时我收到以下错误