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 :

INSERT avec des données qui viennent de 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 365
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut INSERT avec des données qui viennent de 2 tables
    Bonsoir,

    Pour effectuer cela, m'inspirant de ce que m'avait dit CinePhil dans la discussion https://www.developpez.net/forums/d2...date-jointure/ post #3, j'ai essayé ça :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TEMPORARY TABLE temp
    SELECT user_key 
    FROM `user`
    WHERE email="pierre.durand@schneider-electric.com";
     
    INSERT INTO `user` (`sesa`,`lastname`,`firstname`,`email`,`company`,`buunitname`,`location`,`manager_key`)
    SELECT
    ('100008','dupont','jean','jean.dupont@schneider-electric.com','Schneider Electric France','Industry Business','CARROS HORIZON',user_key)
    from temp where email="pierre.durand@schneider-electric.com"

    mais ça me donne le message d'erreur suivant :
    Operand should contain 1 column(s)
    Le but est d'insérer 8 colonnes ; pour les 7 premières, j'attribue une valeur mais pour la dernière (manager_key), la valeur est censée être générée par la sous-requête select utilisée dans la création de la table temporaire.
    Comment faut-il s'y prendre, SVP ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 365
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Si pas moyen de le faire en une seule requête, autant faire au plus simple...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
             $sql_select = <<<sql
    SELECT user_key from user WHERE email={$ppp($manager_email)} 
    sql;
     
            $manager_key = $ppp->insert($sql_select);
     
            $sql_insert = <<<sql
    INSERT INTO `user` (`sesa`,`lastname`,`firstname`,`email`,`company`,`buunitname`,`location`,`manager_key`)
    VALUES
    ({$ppp($sesa)},
    {$ppp($lastname)},
    {$ppp($firstname)},
    {$ppp($email)},
    {$ppp($company)},
    {$ppp($buunitname)},
    {$ppp($location)},
    {$ppp($manager_key)} )
    sql;
    Mais si moyen de le faire en une seule requête, je suis preneur.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #3
    Membre confirmé Avatar de isabelle.letrong
    Femme Profil pro
    Conseil - Consultante en systèmes d'information
    Inscrit en
    Juillet 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultante en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 109
    Points : 487
    Points
    487
    Par défaut
    La table temporaire n'est pas nécessaire.
    Par ailleurs, ce qui pose problème c'est la parenthèse ouvrante qui suit le SELECT dans la clause INSERT (et évidemment la parenthèse fermée associée).
    En résumé :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO user (sesa,lastname,firstname,email,company,buunitname,location,manager_key)
    SELECT
    '100008','dupont','jean','jean.dupont@schneider-electric.com','Schneider Electric France','Industry Business','CARROS HORIZON',manager_key
    from user  where email="pierre.durand@schneider-electric.com"
    devrait être largement suffisant (notez par ailleurs les cotes qui ont été expurgées).

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 365
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour votre réponse. Avec cette requête, plus de message d'erreur, mais pas d'insertion non plus

    Vous êtes sûre de la fin ? Car l'insertion se fait bien avec
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO user (sesa,lastname,firstname,email,company,buunitname,location,manager_key)
    SELECT
    '100008','dupont','jean','jean.dupont@schneider-electric.com','Schneider Electric France','Industry Business','CARROS HORIZON',1

    (Les cotes venaient simplement d'un copier-coller depuis Mysql Workbench (mon outil pour gérer la bdd) )
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    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 540
    Points
    38 540
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    il y a une erreur dans la clause de restriction : les doubles quotes doivent être remplacées par des simples
    Les doubles quotes sont à utiliser quand des noms réservés ont été utilisés (pas bien ) comme noms d'objets (de table, de vue, de colonne...)

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 365
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    En fait, même avec les" dans la clause where, ça marche. Le bug était que l'utilisateur Pierre Durand n'existait pas ! Maintenant que je l'ai créé, ça marche
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 759
    Points : 52 538
    Points
    52 538
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    En fait, même avec les" dans la clause where, ça marche. Le bug était que l'utilisateur Pierre Durand n'existait pas ! Maintenant que je l'ai créé, ça marche
    Jusqu'au jour ou ça marchera plus et que vous mettrez le système en panne pendant plusieurs jours avant de trouver votre erreur !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre confirmé Avatar de isabelle.letrong
    Femme Profil pro
    Conseil - Consultante en systèmes d'information
    Inscrit en
    Juillet 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultante en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 109
    Points : 487
    Points
    487
    Par défaut Simple quote vs double quote et échapement
    Pour faire suite à SQLpro en un peu plus soft :
    • En SQL ANSI (le standard donc !), un string ne peut être encadré que par de simples quotes et d'ailleurs un administrateur SQL peut forcer MySQL à respecter ce standard (mode ANSI_QUOTE enabled). Donc du jour au lendemain votre code peut ne plus fonctionner si vous utilisez les doubles quotes!
    • La double quote est en général utilisée pour se simplifier la vie (euphémisme) pour pouvoir inclure une simple quote dans un string de cette manière :"J'aime (ou pas) MySQL"
    • En réalité il convient tout simplement d'utiliser l'échappement standard (\') pur ne délimiter les string qu'avec une simple quote tout en intégrant des simple quotes à l'intérieur du string

  9. #9
    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 540
    Points
    38 540
    Billets dans le blog
    9
    Par défaut
    Pour coder des simples quotes dans une chaîne de caractères, on peut également la coder en hexa

  10. #10
    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 780
    Points
    30 780
    Par défaut
    On peut aussi, conformément à la norme, doubler l'apostrophe dans la chaine : 'j''insère l''apostrophe'.
    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.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/12/2019, 00h02
  2. VBA insertion d'une formule somme avec des données dynamique
    Par yann26 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/06/2014, 16h32
  3. Réponses: 3
    Dernier message: 07/04/2010, 18h27
  4. Réponses: 1
    Dernier message: 28/02/2008, 14h26
  5. Réponses: 2
    Dernier message: 26/04/2006, 08h53

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