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 :

SELECT et INSERT INTO


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Par défaut SELECT et INSERT INTO
    Bonjour à tous

    je cherche à faire un sélect dans BDD1 pour INSERT INTO BDD2 avec une condition. EN fait à l'origine dans rates j'ai 2 tables "customers" et "customers_prices" je veux copier les données des deux tables et les insérer dans ma BDD tarif dans la table clients...


    J'ai écrit ça mais ça me dit "unknown column clients.id"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tarif.clients (clients.destination_id, clients.connections, clients.price) SELECT customers_prices.destination_id, customers_prices.connection, customers_prices.price FROM rates.customers_prices INNER JOIN tarif.clients WHERE clients.clients_id LIKE customers_prices.customer_id;
    pourquoi?

    Merci à tous pour votre aide précieuse !

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    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 624
    Billets dans le blog
    10
    Par défaut
    Bonsoir,

    Quel est le DDL de vos tables ?

    De plus vous utilisez un like entre des valeurs de 2 colonnes, ca ne fonctionnera pas, puisque like nécessite le wilcard %

  3. #3
    Membre confirmé
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Par défaut
    c'est une base de données mysql si c'est votre question.

    OK mais "=" ne fonctionne pas donc comment lui dire?

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Non, la DDL, c'est le CREATE TABLE ...Concernant votre problème, êtres vous sûr de l'avoir bien posé ?
    La requete que vous avez postée est-elle réellement celle qui a généré le message d'erreur que vous indiquez (et le message est-il exacte : copier/coller, on une retranscription ?) car il indique une colonne qui n'est pas présente dans la requete que vous postez.

    Enfin, votre requete est incorrecte, il manque notamment la condition de jointure ON ...

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 900
    Par défaut
    Salut malhek69.

    Il nous faudrait le descriptif de vos tables (ddl) dans vos 2 bases de données.

    Vos bases de données se nomment :
    --> tarif
    --> rates

    Vos tables préfixées par le nom de la base sont :
    --> rates.customers_prices
    --> tarif.clients

    Vos colonnes sont :
    pour la table rates.customers_prices :
    --> destination_id
    --> connection
    --> price
    --> customer_id

    pour la table tarif.clients :
    --> destination_id
    --> connection
    --> price
    --> client_id

    Le prédicat like est fait pour tester une colonne vis-à-vis d'une chaîne de caractères.
    Comme le dit Escartefigue, ce prédicat est utilisé avec le caractère '%' pour rechercher des sous-chaînes.
    Ici, vous faites deux erreurs :
    --> vous testez une colonne vis-à-vis d'une autre colonne, donc c'est '=' qu'il faut mettre.
    --> vous utilisez une jointure (inner join), mais vous n'indiquez pas le critère de cette jointure (on).

    Afin de simplifier l'écriture de votre requête, utilisez l'alias 'as'.
    Exemple : "from rates.customers_prices as tb1".
    Ainsi quand vous précisez une colonne, vous le préfixez par cette alias.
    Exemple : "tb1.connections".


    Si j'ai bien compris votre requête, vous faites une jointure entre la table qui est cours d'insertion (tarif.clients) avec la table rates.customers_prices.
    Si votre table tarif.clients est vide, cela ne fonctionnera pas.

    J'ai repris votre requête en la normalisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO tarif.clients (destination_id, connections, price)
      select tb1.destination_id,
             tb1.connections,
             tb1.price
      from rates.customers_prices as tb1
     
      inner join tarif.clients    as tb2
      on tb2.client_id = tb1.customer_id
    ;
    @+

  6. #6
    Membre confirmé
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Par défaut
    OK ! le INNER join n'invite pas un where mais un ON pour la condition du coup parfait mais table est remplie comme je le voulais!

    Histoire de vous embêter encore un peu imaginons, cette requête j'ai voulu la faire parce que je faisais ma table en deux étapes.

    Donc j'ai 2 BDD

    BDD1 = tarif
    BDD2 = rates

    dans ma BDD1 tarif j'ai une table clients (nom_clients, destination_id, connection, prix_minute, client_id)
    dans ma BDD2 j'ai 2 tables correspondantes: customers (customer_id, customer_name) customers_prices (customer_id, customer_name, destination_id, connection, price)


    J'avais écrit ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tarif.client (nom_client, destination_id, connection, prix_minute, client_id) SELECT rates.customers.customer_name, rates.customers_prices.destination_id, rates.customers_prices.connection, rates.customers_prices.price, rates.customers.customer_id INNER JOIN rates.customers, rates.customers_prices ON rates.customers.customer_id = rates.customers_prices.customer_id
    Mais... surprise... ça ne marche pas. ERROR 1054 (42S22): Unknown column 'rates.customers.customer_id' in 'on clause'

    En fait maintenant avec le code d'Artemus24 j'arrive à copier toutes mes données SAUF quand j'ai une condition pour plusieurs champs (tarif.client.client_id = rates.customers.customer_id = rates.customers_prices.customer_id)

    Désolée de vous ennuyer avec tout ça

    Solène

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 900
    Par défaut
    Salut malhek69.

    Dans votre requête, je ne voie nulle part le "FROM".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    INSERT INTO tarif.client (nom_client, destination_id, connection, prix_minute, client_id)
      SELECT tb1.customer_name,
             tb1.destination_id,
             tb1.connection,
             tb1.price,
             tb1.customer_id
      from       rates.customers        as tb1
    
      INNER JOIN rates.customers_prices as tb2
      ON tb2.customer_id = tb1.customer_id
    
      INNER JOIN tarif.client           as tb3
      ON  tb3.client_id   = tb1.customer_id;
    @+

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    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 624
    Billets dans le blog
    10
    Par défaut
    bonjour,

    Vous devriez formater vos requêtes, ça vous permettrait de diagnostiquer beaucoup plus facilement certaines erreurs, et aiderait aussi les relecteurs à le faire
    Pensez à la maintenance

    Si votre requête est en vrac, souvent le cas quand générée automatiquement par un outil, il existe des sites internet gratuits qui aident à reformater, par exemple http://sqlformat.org/

  9. #9
    Membre confirmé
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Par défaut
    Autant pour moi je l'avais bien tapé dans ma requête mais sous cette forme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tarif.client (nom_client, destination_id, connection, prix_minute, client_id) SELECT rates.customers.customer_name, rates.customers_prices.destination_id, rates.customers_prices.connection, rates.customers_prices.price, rates.customers.customer_id DROM rates.customers, rates.customers_prices INNER JOIN rates.customers, rates.customers_prices ON rates.customers.customer_id = rates.customers_prices.customer_id
    Merci infiniment ça marche du tonnerre !

  10. #10
    Membre confirmé
    Femme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 56
    Par défaut
    Citation Envoyé par escartefigue Voir le message

    Si votre requête est en vrac, souvent le cas quand générée automatiquement par un outil, il existe des sites internet gratuits qui aident à reformater, par exemple http://sqlformat.org/
    Qu'entendez-vous par là? j'ai écrit cette requête moi-même, qu'y avait-il de non formaté?
    Quels sont ces outils qui génèrent automatiquement une requête?

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    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 624
    Billets dans le blog
    10
    Par défaut
    C'est très simple voici votre requête, que je trouve illisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tarif.client (nom_client, destination_id, connection, prix_minute, client_id) SELECT rates.customers.customer_name, rates.customers_prices.destination_id, rates.customers_prices.connection, rates.customers_prices.price, rates.customers.customer_id DROM rates.customers, rates.customers_prices INNER JOIN rates.customers, rates.customers_prices ON rates.customers.customer_id = rates.customers_prices.customer_id
    La même reformatée dans laquelle les défauts sautent immédiatement aux yeux (je les ai mis en rouge)
    Code : 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
    INSERT INTO tarif.client 
              (nom_client, 
               destination_id, 
               CONNECTION, 
               prix_minute, 
               client_id)
    SELECT rates.customers.customer_name,
           rates.customers_prices.destination_id,
           rates.customers_prices.CONNECTION,
           rates.customers_prices.price,
           rates.customers.customer_id 
    DROM rates.customers,
         rates.customers_prices
    INNER JOIN rates.customers,
                 rates.customers_prices
       ON rates.customers.customer_id = rates.customers_prices.customer_id
    Un ETL par exemple génère des requêtes, les progiciels aussi etc...

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

Discussions similaires

  1. SELECT DANS INSERT INTO
    Par koker92 dans le forum Débuter
    Réponses: 9
    Dernier message: 24/06/2011, 17h18
  2. insert into table values/ insert into table select
    Par aaronw dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/05/2005, 15h14
  3. insert into from select ?
    Par axel584 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 25/01/2005, 18h10
  4. 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
  5. 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

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