为什么不能“选择DISTINCT 1 AS得分ORDER BY得分DESC;”在创建临时表时工作

时间:2010-08-04 11:51:59

标签: mysql

在MySQL中,这部分代码可以工作并生成一行“1”作为值。

SELECT DISTINCT 1 AS score
ORDER BY score DESC;

但是,当我使用它创建临时表时,如下所示:

DROP TEMPORARY TABLE IF EXISTS `testTable`;
CREATE TEMPORARY TABLE `testTable`
SELECT DISTINCT 1 AS score
ORDER BY score DESC;

MySQL会说:你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第3行的“order by score desc”附近使用正确的语法

请注意,以下代码适用于没有ORDER BY的代码

DROP TEMPORARY TABLE IF EXISTS `testTable`;
CREATE TEMPORARY TABLE `testTable`
SELECT DISTINCT 1 AS score;

如下所示,使用FROM子句附加它将起作用......

DROP TEMPORARY TABLE IF EXISTS `testTable`;
CREATE TEMPORARY TABLE `testTable`
SELECT DISTINCT 1 AS score
FROM tableX
ORDER BY score DESC;

我知道上面的示例并不重要,但这更像是一个好奇的问题。感谢。

2 个答案:

答案 0 :(得分:0)

select语句完全有效所以它应该可以工作,但是MySQL可能对这个语句有点挑剔或错误。

您可能缺少要存储数据的列的数据类型。添加列名和数据类型使其有效。

CREATE TEMPORARY TABLE testTable(得分INTEGER)SELECT 1 AS得分;

如果没有指定数据类型,则在这种情况下,create语句必须猜测它是否为tinyint,smallint,integer ...如果从表中选择,则在表中定义数据类型。

答案 1 :(得分:0)

应该是CREATE TEMPORARY TABLE testTable AS SELECT ...? (也就是说,在表名后面添加一个AS。)