具有以下架构:
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'。 H2 无法处理的子查询中的 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);
关于java - 为什么 ENUM 不能在 H2 的子查询中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53462904/