我想在进行更新查询时选择一个表,但我收到错误代码 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数据库,但我一直收到此错误

T-SQL:手动锁定表几分钟[重复]

收到错误“查询输入必须包含至少一个表或查询”。

试图避免更新查询

我想在 iTunes Connect 中将我的通用应用程序更新为仅限 iPad 的应用程序。但是在提交二进制文件时我收到以下错误