计算列必须位于INSERT VALUES中的GROUP BY列表中

时间:2017-03-11 08:41:49

标签: sql h2

我有一个包含日志行的表,并添加了一些计算列:

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语句的末尾,它运行正常。

但问题是“错误是什么意思?”仍然...

0 个答案:

没有答案