Почему ENUM не будут работать в подзапросах в H2? - PullRequest
0 голосов
/ 25 ноября 2018

Со следующей схемой:

CREATE TABLE FOOD (
  SERIAL_NUMBER BIGINT,
  FOOD_TYPE ENUM('FRUIT','VEGGIE','MEAT')
);

и следующими данными:

INSERT INTO FOOD(SERIAL_NUMBER, FOOD_TYPE)
VALUES(12345, 'FRUIT');

Я пытаюсь выполнить следующий запрос в H2:

SELECT count(*) FROM (
  SELECT * FROM FOOD WHERE FOOD_TYPE <> 'MEAT'
)

И я получаю следующее сообщение об ошибке:

Column "MEAT" not found; SQL statement:
SELECT count(*) from ( 
SELECT * FROM FOOD WHERE FOOD_TYPE <> 'MEAT' 
) [42122-197]

Без предложения WHERE или с фильтрацией по SERIAL_NUMBER вместо FOOD_TYPE запрос выполняется нормально и возвращает '1«.Есть ли что-то о ENUM в подзапросах, которые H2 не может обработать?

1 Ответ

0 голосов
/ 02 декабря 2018

Я думаю, что лучше, если вы используете Table, содержащий ваши типы, чем использование enum.Пример из sqlit:

CREATE TABLE Price (
  PriceId INTEGER       PRIMARY KEY AUTOINCREMENT NOT NULL,
  Name    VARCHAR(100)  NOT NULL,
  Type    CHAR(1)       NOT NULL DEFAULT ('M') REFERENCES PriceType(Type)
);

CREATE TABLE PriceType (
  Type    CHAR(1)       PRIMARY KEY NOT NULL,
  Seq     INTEGER
);
INSERT INTO PriceType(Type, Seq) VALUES ('M',1);
INSERT INTO PriceType(Type, Seq) VALUES ('R',2);
INSERT INTO PriceType(Type, Seq) VALUES ('H',3);
...