2014-06-12 40 views
0

我试图插入使用select语句。但是,我需要使用排名方程来排序子选择结果。如果我创建一个别名,它会抛出列计数。我能以某种方式使用方程来排序我的结果吗?MySQL INSERT ... SELECT列数和虚拟/别名列

INSERT INTO draft 
    (fk_contrib_id , end_time) 
    SELECT pk_contrib_id, UNIX_TIMESTAMP(), (X+Y+Z) AS ranking 
    FROM contrib 
    ORDER BY ranking DESC 
    LIMIT 1 

我需要'排名'列排序,但如果我这样做,列计数是关闭插入。我必须为此使用两个查询吗?

+1

不'ORDER BY(X + Y + Z)'不工作? –

+0

我想我的编码时间太长了。这似乎是一个完全合理的解决方案。谢谢shree.pat18,对于这个愚蠢的问题感到抱歉。 – OnNIX

回答

1

你可以简单地改变你的查询直接使用表达式ORDER BY子句中,像这样:

INSERT INTO draft 
(fk_contrib_id , end_time) 
SELECT pk_contrib_id, UNIX_TIMESTAMP() 
FROM contrib 
ORDER BY (X+Y+Z) DESC 
LIMIT 1 
0

从SELECT列表中删除表达式。并使用ORDER BY子句中的表达式。

ORDER BY X+Y+Z 

对于不在SELECT列表中的ORDER BY表达式是完全有效的。