我想知道爲什麼像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