意外的操作数应包含1列错误

时间:2014-04-09 20:15:37

标签: mysql sql mysql-error-1241

我有一张桌子,曝光,看起来像这样:

+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| src        | varchar(20)   | NO   |     | NULL    |       |
| instrument | varchar(10)   | NO   |     | NULL    |       |
| result     | decimal(12,3) | NO   |     | NULL    |       |
| instant    | bigint(20)    | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

此表用于存储历史曝光值,预计会包含偶尔的间隙。我试图在给定的src和瞬间选择所有(仪器,结果,即时),或者在目标瞬间或者在小于目标瞬间的最大瞬间。以下SELECT语句就是这样做的。

SELECT * FROM exposure AS e 
    WHERE e.instant = (SELECT MAX(instant) FROM exposure 
        WHERE instant <= 1396985195077 
        AND src = 'testSrc') 
     AND e.src = 'testSrc';

但是,当我尝试在下面的查询中指定我想要选择的列时,MySQL以ERROR 1241(21000)响应:操作数应包含1列。我怀疑它使内部和外部查询混淆。

SELECT (e.instrument, e.result, e.instant) FROM exposure AS e 
    WHERE e.instant = (SELECT MAX(instant) FROM exposure 
        WHERE instant <= 1396985195077 
        AND src = 'testSrc') 
     AND e.src = 'testSrc';

我的MySQL版本字符串是:服务器版本:5.5.34-0ubuntu0.13.04.1(Ubuntu)。

1 个答案:

答案 0 :(得分:1)

SELECT (e.instrument, e.result, e.instant)更改为

SELECT e.instrument, e.result, e.instant 
FROM ..

使用()中的列mysql将其标识为要执行的任何操作,因此有多个列会出现错误,如果您仍想使用括号,则应该有一列,您可以选择列作为

SELECT (e.instrument), (e.result), (e.instant) 
FROM ..