MySQL INSERT ... SELECT列计数和虚拟/别名列

时间:2014-06-12 03:34:00

标签: mysql sql-insert subquery

我正在尝试使用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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

  ORDER BY X+Y+Z 

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