mysql - "Every derived table must have its own alias"即使我给了他们别名

标签 mysql sql

我有这个查询,它从前一行的列之一(“next_line”)中选择数据,并从最近行中的不同列(“raw_line”)中选择数据。

SELECT CONCAT((SELECT `next_line` FROM `lines` ORDER BY id DESC LIMIT 1 OFFSET 1), (SELECT     
`raw_line` FROM `lines` ORDER BY id DESC LIMIT 1))

这个查询按原样工作得很好。但我想要做的是将这个输出放入最近行 *('composed_line')* 的不同列中。但是当我这样做时:

UPDATE `lines` set `composed_line`=CONCAT((SELECT `next_line` FROM `lines` ORDER BY id DESC LIMIT 
1 OFFSET 1), (SELECT `raw_line` FROM `lines` ORDER BY id DESC LIMIT 1)) ORDER BY id DESC LIMIT 1;

我收到此错误:

#1093 - You can't specify target table 'lines' for update in FROM clause 

所以我尝试了这个:

UPDATE `lines` set `composed_line`=CONCAT((SELECT `next_line` FROM (SELECT * FROM `lines` ORDER 
BY id DESC LIMIT 1 OFFSET 1) AS `alias`, (SELECT `raw_line` FROM (SELECT * FROM `lines` ORDER BY 
id DESC LIMIT 1)) AS `alias2` ORDER BY id DESC LIMIT 1

我得到了这个错误:

 #1248 - Every derived table must have its own alias 

我看不出我做错了什么 - 'alias''alias2' 不算作派生表别名吗?

非常感谢任何帮助!

最佳答案

您的内部选择还需要一个别名:

UPDATE `lines` set `composed_line`= 
CONCAT((SELECT `next_line` FROM (SELECT * FROM `lines` ORDER 
BY id DESC LIMIT 1 OFFSET 1) AS `alias`, 
(SELECT `raw_line` FROM (SELECT * FROM `lines` ORDER BY 
id DESC LIMIT 1) AS `alias3` ) AS `alias2` ORDER BY id DESC LIMIT 1

另请参阅:every derived table must have its own alias

关于mysql - "Every derived table must have its own alias"即使我给了他们别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201485/

相关文章:

mysql - 高效的 MySQL 查询查找 A 中与 B 不匹配的条目

php - 明显不在 Laravel 中工作

sql - 存储简单正则表达式的高效方法

sql - T-SQL插入触发器在多个表上根据if条件插入、更新

sql - 编写带有 "not in"子查询的 select 语句最有效的方法是什么?

javascript - 如何在没有任何提交按钮的情况下动态显示基于从下拉列表中选择的年份的记录

MYSQL:SELECT 语法错误...INTO OUTFILE

php - mysql wpdb 查询计数返回 null

mysql - 计算另一个计数值,但前提是它足够高

sql - ValidFrom 的时态表默认约束不起作用