Mysql 子查询语法

标签 mysql sql syntax subquery

我想知道为什么像 select * as t 这样的语句会出现在 mysql 子查询中,如下所示。

下面根据 created_time 列删除表中最旧的 3 行。

为什么这样说

DELETE FROM mytable WHERE id = ANY 
( SELECT * FROM ( SELECT id FROM mytable ORDER BY created_time ASC LIMIT 3')as t)

不是

DELETE FROM mytable WHERE id = ANY 
(SELECT id FROM mytable ORDER BY created_time ASC LIMIT 3) 

?

对我来说,第二种形式是有道理的。它不起作用,我想了解为什么第一个是必要的。具体来说,t 是什么,as t 有什么作用?

最佳答案

在许多数据库中,from 子句中的子查询需要有一个明确的别名。 as 是可选的。我通常对列使用 as 而对表不使用它:

DELETE FROM mytable
    WHERE id = ANY ( SELECT * FROM ( SELECT id FROM mytable ORDER BY created_time ASC LIMIT 3') t)

为什么需要子查询是 MySQL 的变幻莫测。它不允许 deleteupdate 中的表引用出现在子查询子句中。哦,它确实允许在子查询内的子查询子句中使用它。因此,很容易解决此限制。

关于Mysql 子查询语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14963031/

相关文章:

java - 当 int 在圆括号内时会发生什么?

php - 在 MySQL 查询中使用 session

php - 如何在数据库中正确插入浮点变量

mysql - 在 MySQL 中表示票价表

Mysql语法 "if length then"语句

Python - 通过迭代创建字典

php - 使用 while 循环和 if 语句从不同表中获取数据

php - ip2long转换后的IP应该如何存储在MySQL中?

带有更新子查询的 Sqlite 注入(inject)

mysql - 在应用 LIMIT 之前如何计算所选行的总数?