【问题标题】:Unexpected Operand should contain 1 columns error [duplicate]意外的操作数应包含 1 列错误 [重复]
【发布时间】:2014-04-09 20:15:37
【问题描述】:

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

+------------+---------------+------+-----+---------+-------+
| 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)。

【问题讨论】:

    标签: mysql sql mysql-error-1241


    【解决方案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 ..
    

    【讨论】:

    • 感谢提醒,当面对一个广泛使用的程序中的错误时,我应该首先检查我没有犯任何基本错误。
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多