我的sqlite表具有非常简单的结构:
CREATE TABLE `test` ( `id` INTEGER, `val` TEXT )
我想仅选择最大ID,其中 val
字段值等于字符串" test_id":
SELECT max(id) AS test_id FROM test WHERE val = "test_id" // (1)
请注意,我使用" test_id " WHERE
中的字符串和 test_id 作为自定义列名。我有错误:
misuse of aggregate: max(): SELECT max(id) AS test_id FROM test WHERE val = "test_id"
如果我将max(id) AS test_id
更改为max(id) AS test_id2
或WHERE val = "test_id"
为WHERE val = "test_id_something"
-所有作品。
在MySQL中,我没有原始选择(1(没有错误。校正版本效果很好。我做错了什么?是否不允许在WHERE
中使用相同的文本和SQLite中的列名?
在SQL中,双引号用于参考列/表名称,而test_id
确实是列名称。字符串用单引号界定:
SELECT max(id) AS test_id FROM test WHERE val = 'test_id'
sqlite允许字符串的双引号,以便与mySQL兼容,但是如果疑问,它必须选择标准解释。
您已经回答了自己的问题
如果我将max(id(作为test_id将最大(id(更改为test_id2或where val =" test_id" where val =" test_id_something" - 全部工作。
WHERE val = "test_id"
参考max(id) AS test_id
。您需要使用不同的名称。尝试这个
SELECT max(id) AS max_id FROM test WHERE val = "some_value"
misuse of aggregate: max():
是使用WHERE
句子中使用聚合函数(AVG
,COUNT
,MIN
,MAX
,CC_15 ...(的正常结果
http://sqlfiddle.com/#!7/b28b3/11