2017-05-15 98 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