1

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

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

4

1 回答 1

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 ..
于 2014-04-09T20:19:35.377 回答