2017-05-15 65 views
0

常量随后进行的是H2DB查询INSERT INTO表中选择不与H2 DB

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 = "[email protected]"; 

我想实现是记录插入userpermission与user表中指定的电子邮件地址的用户,为权限表中的每个权限。

以下是错误

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 = "[email protected]" [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 = "[email protected]"] 

同样的查询工作在MySQL。

+2

不确定H2,但在所有的RDMS中,常量用单引号声明。括号也是不必要的。用'1'替换'(“1”)'。 – Utsav

+0

是的,我在添加大括号之前试过。不起作用。 – TechCrunch

+0

用双引号替换双引号。首先运行select语句。此外,您通过不给予连接条件来进行交叉连接。那是故意的吗? – Utsav

回答

1

正如评论所说,

  1. 使用单引号刺痛常数。
  2. 不要在select子句中使用具有常量的大括号。
  3. 检查连接条件。如果没有根据公共列匹配2个表,您正在做一个Cartesian product
+1

只有第一点是错误的原因。大括号是可选的。 3在我的情况下是故意的。我正在考虑将值插入交叉产品表中进行测试,通常是手动输入。 – TechCrunch

+0

好的。感谢您清理它,因为笛卡尔产品正在扰乱我。 – Utsav