我想知道为什么像select * as t
这样的语句出现在如下所示的mysql子查询中。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
是做什么的?
这是愚蠢的MySQL限制之一。第二个声明适用于所有其他DBMS。即使第一个被接受,我也记得它的一些问题。你只是不能使用你在MySQL中的一个子选择中删除的表,你需要使用一个连接 – 2013-02-19 16:56:50
@a_horse_with_no_name:这个解决方法的例子不能按预期工作:** [MySQL子查询的问题](http: //dba.stackexchange.com/questions/1371/problem-with-mysql-subquery)** – 2013-02-19 17:05:39
@ypercube:谢谢,那正是我心中所想;) – 2013-02-19 17:35:22