【发布时间】:2013-02-19 16:55:14
【问题描述】:
我想知道为什么像 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 是做什么的?
【问题讨论】:
-
这是愚蠢的 MySQL 限制之一。第二条语句适用于所有其他 DBMS 就好了。即使第一个被接受,我也记得它的一些问题。您只是不能在 MySQL 的子选择中使用要从中删除的表,您需要使用连接
-
@a_horse_with_no_name:此解决方法的示例未按预期工作:Problem with MySQL subquery
-
@ypercube:谢谢,这正是我的想法;)
-
心理图像:你进入迷宫并在路上 - 不像忒修斯 - 你砍断了线。不要指望安全出来。