java - 为什么 ENUM 不能在 H2 的子查询中工作?

标签 java sql enums subquery h2

具有以下架构:

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/

相关文章:

java - 从整数的复合除法返回 Double

java - 如何在 Java 中过滤数组?

MySQL - SQL 跳过间隔,例如每5分钟记录一次

sql - 将所选列从 CSV 文件导入到 SQL Server 表

algorithm - 如何优化跳转表的大小?

java - 为什么 java.util.Calendar before() 和 after() 方法将 Object 作为参数,如果传递的 Object 不是 Calendar,则简单地返回 false?

java - 最大公约数挑战(欧几里得算法)

sql - 国家、地区、县、镇的最佳数据库模式

vba - 如何将所有类硬编码值保存在一个地方

jsf - 如何测试 JSF 中的枚举相等性?