我有一个包含日志行的表,并添加了一些计算列:
CREATE TABLE IF NOT EXISTS log_lines (
id identity NOT NULL PRIMARY KEY,
time_stamp bigint NOT NULL,
-- some other columns here ...
type_text varchar NOT NULL,
flag_text varchar NOT NULL,
-- computed columns
shield boolean NOT NULL AS type_text LIKE '%Shield%',
-- some other computed columns here ...
-- all BOOLEAN columns computed from values of the VARCHAR columns
);
当我尝试在此表中插入一行时:
INSERT
INTO log_lines ( time_stamp, ... , type_text, flag_text )
VALUES ( 123456789, ... , '', '' )
H2引发了一个奇怪的错误
org.h2.jdbc.JdbcSQLException: Column "SHIELD" must be in the GROUP BY list; SQL statement:
INSERT
INTO LOG_LINES ( TIME_STAMP, ... , TYPE_TEXT, FLAG_TEXT )
VALUES ( 123456789, ... , '', '' ) [90016-182]
我真的迷失在这里......
在发布问题之后,我发现解决了为什么会抛出错误。
罪魁祸首是另一个计算列,它在shield
之前声明并从中计算出来。将该计算列移动到CREATE TABLE
语句的末尾,它运行正常。
但问题是“错误是什么意思?”仍然...