INSERT INTO table SELECT 不使用 H2 DB 中的常量值
INSERT INTO table SELECT not working with constant values in H2 DB
以下是H2DB查询
INSERT INTO userpermission (userid, permissionid, createddt, createdby, updateddt, updatedby)
SELECT u.userid, p.permissionid, now(), ("1"), now(), ("1") FROM user u, permission p
WHERE u.email = "csr_admin@example.com";
我想要实现的是为用户 table 中具有给定电子邮件地址的用户在权限 table 中的每个权限中插入一条记录。
错误如下
Reason: liquibase.exception.DatabaseException: Column "1" not found; SQL statement:
INSERT INTO userpermission (userid, permissionid, createddt, createdby, updateddt, updatedby)
SELECT u.userid, p.permissionid, now(), ("1"), now(), ("1") FROM user u, permission p
WHERE u.email = "csr_admin@example.com" [42122-193] [Failed SQL: INSERT INTO userpermission (userid, permissionid, createddt, createdby, updateddt, updatedby)
SELECT u.userid, p.permissionid, now(), ("1"), now(), ("1") FROM user u, permission p
WHERE u.email = "csr_admin@example.com"]
相同的查询正在 MySQL。
如评论中所述,
- 对字符串常量使用单引号。
- 不要在 select 子句中使用带常量的大括号。
- 检查加入条件。没有基于公共列匹配 2 个表,你正在做 Cartesian product
我遇到了类似的问题。当我的 springboot 应用程序首次运行时,我想在我的 H2 中插入一些默认值。我的 schema.sql 和 data.sql 都是正确的。
但是,当我 select *
时,它仍然不会将示例数据加载到 H2 架构中 table。环顾了一个小时后。我决定查看 application.properties
文件。我变了
spring.jpa.hibernate.ddl-auto=create-drop
到spring.jpa.hibernate.ddl-auto=none
或spring.jpa.hibernate.ddl-auto=update
两者都有效。以防万一你想知道为什么 none
和 update
都有效,这里是
以下是H2DB查询
INSERT INTO userpermission (userid, permissionid, createddt, createdby, updateddt, updatedby)
SELECT u.userid, p.permissionid, now(), ("1"), now(), ("1") FROM user u, permission p
WHERE u.email = "csr_admin@example.com";
我想要实现的是为用户 table 中具有给定电子邮件地址的用户在权限 table 中的每个权限中插入一条记录。
错误如下
Reason: liquibase.exception.DatabaseException: Column "1" not found; SQL statement:
INSERT INTO userpermission (userid, permissionid, createddt, createdby, updateddt, updatedby)
SELECT u.userid, p.permissionid, now(), ("1"), now(), ("1") FROM user u, permission p
WHERE u.email = "csr_admin@example.com" [42122-193] [Failed SQL: INSERT INTO userpermission (userid, permissionid, createddt, createdby, updateddt, updatedby)
SELECT u.userid, p.permissionid, now(), ("1"), now(), ("1") FROM user u, permission p
WHERE u.email = "csr_admin@example.com"]
相同的查询正在 MySQL。
如评论中所述,
- 对字符串常量使用单引号。
- 不要在 select 子句中使用带常量的大括号。
- 检查加入条件。没有基于公共列匹配 2 个表,你正在做 Cartesian product
我遇到了类似的问题。当我的 springboot 应用程序首次运行时,我想在我的 H2 中插入一些默认值。我的 schema.sql 和 data.sql 都是正确的。
但是,当我 select *
时,它仍然不会将示例数据加载到 H2 架构中 table。环顾了一个小时后。我决定查看 application.properties
文件。我变了
spring.jpa.hibernate.ddl-auto=create-drop
到spring.jpa.hibernate.ddl-auto=none
或spring.jpa.hibernate.ddl-auto=update
两者都有效。以防万一你想知道为什么 none
和 update
都有效,这里是