我有一张桌子,曝光,看起来像这样:
+------------+---------------+------+-----+---------+-------+
| 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)。
答案 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 ..