我的SQLite表结构非常简单:
CREATE TABLE `test` ( `id` INTEGER, `val` TEXT )
我想只选择val
字段值等于字符串“test_id”的最大ID:
SELECT max(id) AS test_id FROM test WHERE val = "test_id" // (1)
请注意,我使用WHERE
中的“ test_id ”字符串和 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中,原始SELECT (1)没有错误。修正后的版本效果很好。
我做错了什么?是不允许在WHERE
中使用相同的文本,在SQLite中使用列名?
答案 0 :(得分:0)
您已回答了自己的问题
如果我将max(id)AS test_id更改为max(id)AS test_id2或WHERE val =" test_id" to 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():
是使用汇总函数的正常结果(AVG
,COUNT
,MIN
,MAX
,SUM
...)在WHERE
条款中
答案 1 :(得分:0)
在SQL中,双引号用于引用列/表名,test_id
确实是列名。字符串用单引号分隔:
SELECT max(id) AS test_id FROM test WHERE val = 'test_id'
SQLite允许字符串使用双引号,以便与MySQL错误兼容,但如果有疑问,则必须选择标准解释。