2017-05-15 1 views
0

Suite est la requête H2DBINSERT INTO table SELECT ne fonctionne pas avec des valeurs constantes dans 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]"; 

Ce que je suis en train de réaliser est d'insérer un enregistrement dans userpermission pour l'utilisateur avec l'adresse e-mail indiquée dans le tableau utilisateur, pour chaque permission dans la table d'autorisation.

Suite est l'erreur

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

La même requête travaille dans MySQL.

+2

Vous n'êtes pas sûr de H2, mais dans tous les RDMS, les constantes sont déclarées avec des guillemets simples. Les accolades sont également inutiles. Remplacez '(" 1 ")' par ''1''. – Utsav

+0

Oui, j'ai essayé ça avant d'ajouter des accolades. Ne marche pas. – TechCrunch

+0

Remplace également les guillemets doubles par des guillemets simples. Exécutez simplement l'instruction select en premier. Aussi, vous faites une jointure croisée en ne donnant pas de condition de jointure. Est-ce intentionnel? – Utsav

Répondre

1

Comme mentionné dans les commentaires,

  1. Utilisez des guillemets simples pour les constantes de piqûre.
  2. N'utilisez pas d'accolades avec des constantes dans l'article select.
  3. Vérifiez la condition de jointure. Sans faire correspondre 2 tables basées sur la colonne commune, vous faites Cartesian product
+1

Seul le premier point est la cause de l'erreur. Les accolades sont facultatives. 3 est intentionnel dans mon cas. Je cherche à insérer des valeurs dans la table de produits croisés pour les tests qui sont généralement entrés manuellement. – TechCrunch

+0

Ok. Merci de m'avoir nettoyé car le produit cartésien m'embêtait. – Utsav