IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Combiné Insert et Select


Sujet :

Requêtes MySQL

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 065
    Points : 2 567
    Points
    2 567
    Par défaut Combiné Insert et Select
    Bonjour,

    Je développe actuellement un projet avec Spring et JPA, et et j'utilise MySql
    Comme je suis en mode 'update' avec hibernate, jedois repeuplé ma base avec des script.

    J'ai deux table Artiste et Morceaux
    Comme mes clefs sont gérées par Hibernate, je ne les connais pas.
    Lors des 'INSERT' sur ma table morceaux est-il possible de combiner un slect dans mon script pour récupérer la clef du groupe pour la donner comme valueur ?
    Où dois je faire du PL/SQL ?

    Il y a bien de la documentation sur la combinaison des Insert et Select, mais ça ne semble pas s'apliquer à mon cas.

    Ce serait un peu comme la requête ci dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into morceau (titre, id_artiste)
    values
    ('Back in black',select id from artiste where nom='ACDC');
    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 783
    Points
    30 783
    Par défaut
    Tu n'étais pourtant pas loin de la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into morceau (titre, id_artiste)
    select 'Back in black', id 
    from artiste 
    where nom='ACDC';
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 065
    Points : 2 567
    Points
    2 567
    Par défaut
    Merci ça marche.

    Il y a peut être un peu de paresse de ma part.
    J'ai cherché un peu à la main dans la console, puis sur le web mais ce n'étais pas claire.

    J'aurai du me douter que je ne pouvais pas mélanger en partie la partie à droite de values avec du texte en dur et un select.
    Et bien tout mettre dans le select

    Voila ma requête avec l'id car Hibernate/JPA n'a pas mis un "Auto_incremen".
    Faut que je vérifie car il y a une annotation pour çat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into morceau (id, titre, interprete_id)
    select '100', 'Back in black', id 
    from interprete 
    where nom='ACDC';
    Par contre je veux bien te mettre un +1, mais ça ne marche pas avec le clavier.
    Le code dois gérer seulement la sourie.
    Je vais tenter quand même


    Cordialement
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 129
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par CoderInTheDark Voir le message
    Voila ma requête avec l'id car Hibernate/JPA n'a pas mis un "Auto_incremen".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into morceau (id, titre, interprete_id)
    select '100', 'Back in black', id 
    from interprete 
    where nom='ACDC';
    Attention : les quotes pour la valeur de la colonne "id" supposent que cette colonne est de type (var)char, s'il s'agit d'un integer, il faut supprimer les quotes
    De plus, en environnement concurrentiel, il y a un risque d'insertion d'une valeur déjà présente en base de données, d'autres thread ayant pu ajouter cette valeur 100...
    En l'absence de colonne de type "auto_increment", vous pouvez utiliser une table pour gérer la dernière valeur de chrono utilisée (la ligne de cette table sera verrouillée par votre thread pendant votre transaction pour éviter les problèmes de doublons potentiels)

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 065
    Points : 2 567
    Points
    2 567
    Par défaut Bonjour,
    Bonjour,

    Je travaille avec JPA/Hibernate.
    Et c'est lui qui gère les id, je n'ai pas retrouvé l'annotation pour l'obliger à utiliser l'auto increment de MySql lors de la génération de la base.
    C'est pour ça que je démarre à 100 pour rentrer des données de tests, sans le gèner.

    Je suis en développement et donc pas de problème de production type concurence

    Avec MySql je mets les valeurs du insert entre apostrophes, peu importe le type;

    Cordialememt
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Combiner INSERT INTO .. SELECT et VALUES
    Par sacha1208 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/01/2011, 16h32
  2. Insert avec select
    Par Alexandre` dans le forum Langage SQL
    Réponses: 11
    Dernier message: 25/01/2005, 15h16
  3. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39
  4. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32
  5. [Insert et Select de la même table]
    Par lucimast dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/01/2004, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo