【发布时间】:2018-10-10 01:20:29
【问题描述】:
我有一个结构非常简单的 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 中的列名?
【问题讨论】:
-
WHERE即使通过别名也不能使用聚合函数 -
将
"test_id"更改为'test_id'(双引号改为单引号)也可以。 -
您能解释一下您要查找的内容吗?是具有最高 id 的行,其 value = "tast_value"
-
@AryedovEidelman 想象“val”字段描述行类型。例如,它可以是“书”、“CD”、“电影”。如果我想找到类型为“CD”的最高 id,我需要类似:SELECT max(id) AS Book FROM test WHERE val = "Book"