2017-05-15 10 views
0

は私が達成しようとしています何H2DBクエリテーブルにINSERTが一定値で動作していないSELECT

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にレコードを挿入することですパーミッションテーブルのパーミッションごとに続き

は、同じクエリは、MySQLで動作しているエラー

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]"] 

です。スティング定数の

+2

H2についてはわかりませんが、すべてのRDMSでは定数は一重引用符で宣言されています。また、中括弧は不要です。 '(" 1 ")'を '' 1 ''に置き換えてください。 – Utsav

+0

ええ、括弧を追加する前に試しました。動作しません。 – TechCrunch

+0

二重引用符も一重引用符で置き換えます。最初にselect文を実行するだけです。また、結合条件を与えないことによってクロス結合を行っています。それは意図的なのでしょうか? – Utsav

答えて

1

コメントで述べたように、

  1. 使用単一引用符。
  2. select句に定数付き中括弧を使用しないでください。
  3. 結合条件を確認してください。 Cartesian product
+1

最初のポイントだけがエラーの原因です。中括弧は省略可能です。私の場合、3は意図的です。私は、通常は手動で入力されるテストのために、クロス積テーブルに値を挿入することを検討しています。 – TechCrunch

+0

デカルト製品が私を悩ませていたので、それをクリアしてくれてありがとう。 – Utsav

関連する問題