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 :

Insérer le résultat d'une requête dans une colonne d'une autre table


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut Insérer le résultat d'une requête dans une colonne d'une autre table
    Bonjour à tous
    SVP je suis bloqué, j'ai cherché toute la matinée , je n'arrive pas à trouver .

    J'ai une table coordonnées, je veux faire la concaténation des deux colonnes (nom et prénom)
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 
    CONCAT(nom,'-', prénom) as nom_prénom 
           FROM base_user.coordonnées
    cela fonctionne bien , j'ai le résultat affiché, le problème ,je veux insérer ce résultat dans une colonne qui se trouve dans une autre table 'travail' avec la colonne 'employé'
    j'ai essayé un ALTER TABLE .. ADD puis le code ci-haut mais il me dit erreur de syntaxe, sachant que je travaille sous Mysql workbench
    J'ai essayé aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO travail VALUES (nom_prenom);
    SELECT CONCAT(nom,'-', prenom) as nom_prenom
    FROM coordonnées;
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    le résultat de votre sélection fait partie intégrante de vos valeurs à insérer, il faut donc utiliser une syntaxe comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    insert into ma_table
          (col1 
          ,col2 
          ,col3 
          ,col4)
    values
          ('toto' 
           ,254 
           ,(select (nom !! '-' !!prénom) FROM base_user.coordonnées where... )
           ,'X')
    bien qu'il ne soit pas obligatoire de citer les colonnes que l'on souhaite alimenter, je trouve que c'est plus clair et que ça facilite la maintenance

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut à tous.

    @ Escartefigue : oui, on déclare les noms de colonnes dans le insert.
    Et non, on ne met pas le select dans la partie "values", ça fait pas propre.

    Pour charger une table par rapport à une autre table, il faut utiliser le "insert ... select ...".
    --> http://dev.mysql.com/doc/refman/5.7/...rt-select.html

    @ Coeur de Pirat : voici un exemple :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (
      `id`       integer unsigned NOT NULL AUTO_INCREMENT primary key,
      `nom`      varchar(255)     NOT NULL,
      `prenom`   varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`nom`, `prenom`) VALUES
      ('Einstein', 'Albert'),
      ('hawking',  'Stephen'),
      ('Ampère',   'André-Marie')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+----------+-------------+
    | id | nom      | prenom      |
    +----+----------+-------------+
    |  1 | Einstein | Albert      |
    |  2 | hawking  | Stephen     |
    |  3 | Ampère   | André-Marie |
    +----+----------+-------------+
    --------------
    DROP TABLE IF EXISTS `travail`
    --------------
     
    --------------
    CREATE TABLE `travail`
    (
      `id`          integer unsigned NOT NULL AUTO_INCREMENT primary key,
      `nom_prenom`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    select * from travail
    --------------
     
    --------------
    insert into `travail` (`nom_prenom`)
    select concat(nom, ' - ', prenom) as nom_prenom
    from test
    --------------
     
    --------------
    select * from travail
    --------------
     
    +----+----------------------+
    | id | nom_prenom           |
    +----+----------------------+
    |  1 | Einstein - Albert    |
    |  2 | hawking - Stephen    |
    |  3 | Ampère - André-Marie |
    +----+----------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    bonjour
    Merci pour vos réponses !
    @Aretmus24 te revoilà enfaîte l'exemple que tu as donné je l'ai bien saisi j'avais déjà cherché, par contre il me dit 'nom_prénom' est une clé unique. donc quand je fais la concaténation nom-prénom il est pas content !
    Mais le problème comment on fait si on a plusieurs ligne à charger dans la table ! au même temps (sans préciser "valeur par valeur" car c'est lent et donc ça devient manuel et mon but c'est de le faire de manière automatique )
    Autre chose ma table "travail" contient des colonnes que je n'aurai pas besoin de charger et aussi chaque colonne de ma table "travail" va dans des champs de tables différentes !
    Je sais pas si j'arrive à passer le message !
    merci de votre aide !

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut Cœur de Pirat.

    Citation Envoyé par Coeur de Pirat
    @Artemus24 te revoilà
    Je ne suis pas parti. Je ne réponds pas à tous les messages.

    Citation Envoyé par Coeur de Pirat
    En faîte l'exemple que tu as donné je l'ai bien saisi, j'avais déjà cherché, par contre il me dit 'nom_prénom' est une clé unique. Donc quand je fais la concaténation nom-prénom il est pas content !
    Pourquoi avoir mis un index unique sur la colonne "nom_prenom" ? Un index tout simple suffit largement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX `idx_nom_prenom` USING BTREE ON `test` (`nom_prenom`);
    Citation Envoyé par Coeur de Pirat
    Mais le problème comment on fait si on a plusieurs ligne à charger dans la table ! En même temps (sans préciser "valeur par valeur" car c'est lent et donc ça devient manuel et mon but c'est de le faire de manière automatique )
    L'exemple que je t'ai donné charge plusieurs lignes à la fois.
    Si c'est lent, c'est que tu as trop d'index.
    Tu peux les désactiver avant le chargement et les réactiver après le chargement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set unique_checks      = 0;
    set foreign_key_checks = 0;
    set sql_log_bin        = 0;
    alter table ta_table DISABLE KEYS;
    Citation Envoyé par Coeur de Pirat
    Autre chose ma table "travail" contient des colonnes que je n'aurai pas besoin de charger et aussi chaque colonne de ma table "travail" va dans des champs de tables différentes !
    Je sais pas si j'arrive à passer le message !
    Rien ne t'oblige à tout charger à partir d'une table Excel. Tu prends uniquement ce dont tu as besoin.
    J'entends par là, que tu dois préciser par des @F1, @F2, les colonnes de ton fichier Excel. Ici, dans le load, tu précises juste ce dont tu as besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (@F1, Population, Country, @F4, @F5, @F6, City)
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    Bonjour Aretmus,
    Je n'arrive toujours pas a insérer la colonne CONCAT (nom, '-', prenom) !!! Help me pleaaazz , vraiment je déprime la
    Ci-dessous mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO `base_configuration`.`model` (numéro,id_image,id_nature,id_constructeur)              
    SELECT 'type_capteur.nom, type_capteur.prenom FROM `base_configuration`.`type_capteur`
    WHERE numéro= CONCAT(nom,'-', prenom)' , 4, 2, 236
    Ce que je veux insérer c'est seulement la colonne numéro, les autres colonnes c'est des clés étrangères des autres tables
    S'il vous plait aidez moi à trouver la faille

  7. #7
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    Il me dit 0 erreur et 2 warning : 1292 truncated incorrect DOUBLE value type_capteur.nom, type_capteur.prenom FROM `base_configuration`.`type_capteur`WHERE numéro= CONCAT(
    et truncated incorrect DOUBLE value ,'prénom)'
    Et il m’insère une seule ligne avec les valeurs mais le numéro =0 !!!

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut Cœur de Pirat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'type_capteur.nom
    C'est quoi cette quote, juste après le select, et avant le nom de la colonne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `base_configuration`.`model` (numéro,id_image,id_nature,id_constructeur)
    Et c'est quoi ce 'é' dans 'numéro' ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    type_capteur est le nom de ma table et nom c'est la colonne , le é je savais pas que c'était pas permis mais en tout cas dans mon code j'ai pas d'accent !

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    je te parle de la quote qui n'a rien à faire ici.
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  11. #11
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    base_configuration est le nom de ma base dans mysql workbench et type_capteur et le nom de ma table
    c'est la syntaxe utilisé car la structure je l'ai au préalable, et quand j'édite le script complet de ma base , c'est bien cette syntaxe qu'ils utilisent !!

  12. #12
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    ah oui la quote ! excusez moi j'avais pas compris , comme c'est une chaîne de caractère donc je mets des guillemets ! et les autres insertions c'est des chiffres , on a pas besoin de guillemets

  13. #13
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    @Aretmus 24 Vous êtes toujours la ! S'il vous plaiiit aidez moi

  14. #14
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Citation Envoyé par Coeur de pirate
    @Aretmus 24 Vous êtes toujours la ! S'il vous plaiiit aidez moi
    Laissez moi le temps de répondre à vos questions. Je ne suis pas super rapide !

    Il y a quelque chose que je ne comprends pas dans ce que tu essayes de faire.
    Je fais résumer cela en plusieurs points :

    1) tu donnes une liste de colonnes dans la partie insert : (numéro,id_image,id_nature,id_constructeur).
    Or je lis que tu veux insérer quatre colonnes dans ta tables.
    Mais je ne les retrouves pas dans la partie select ?

    2) Quand tu fais un select, essaye de nommer tes colonnes du même nom que dans la partie insert.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into test (`col1`,`col2`)
    select numero as col1,
           nom as col2
    from sample;
    Cela permet à MySql de s'y retrouver.

    3) c'est quoi cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE numéro= CONCAT(nom,'-', prenom)' , 4, 2, 236
    La clause where sert à restreindre le nombre de lignes à insérer dans la table.
    Tu ne respectes pas la syntaxe de cette clause.

    4) ton select , tu dois l'écrire de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select concat(nom, '-', prenom) as nom_de_ta_colonne_dans_insert,
    4 as autre_nom_de_ta_colonne_dans_insert,
    2 as autre_nom_de_ta_colonne_dans_insert,
    236 as autre_nom_de_ta_colonne_dans_insert,
    from type_capteur;
    En fait, tu ne respectes pas, non plus, la syntaxe du insert ... select.

    5) le mieux est de me communiquer vos deux tables, et ce que vous essayez tant bien que mal à faire. Oui, je sais, c'est un concat(nom,'-',prenom).

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  15. #15
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    merci pour ta réponse Aretmus
    Voila, j'ai corrigé mes erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT  INTO `base_configuration`.`model` (numero,id_image,id_nature,id_constructeur)              
    SELECT  CONCAT(nom,'-', prenom) as numero ,
    4 as id_image,
    2 as id_nature,
    236 as id_constructeur 
    from `base_configuration`.`type_capteur`
    Mais ça ne marche toujours pas ! car ma table 'model' possède un index UNIQUE, j'ai fait comme tu m'avais dit la dernière fois , j'ai essayé de les désactiver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set unique_checks = 0;
    set foreign_key_checks = 0;
    set sql_log_bin  = 0;
    alter table model DISABLE KEYS;
    , mais alors ça m'a fait bloquer mon logiciel et j'ai du redémarrer le pc !

  16. #16
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut Coeur de Pirat.

    tu fais la concatenation de nom et prénom. Jusque là, je comprends. C'est normalement une chaîne de caractères.
    Puis ensuite, tu viens l'insérer dans la colonne de nom "numero". C'est quoi au juste ce "numero" ?
    Si c'est un numéro d'identifiant, il ne veut pas recevoir une chaîne de caractères.

    Citation Envoyé par Coeur de Pirat
    Mais ça ne marche toujours pas ! car ma table 'model' possède un index UNIQUE, j'ai fait comme tu m'avais dit la dernière fois , j'ai essayé de les désactiver
    Un Unique index sur quelle colonne ?

    Je n'avais pas bien compris le problème que tu rencontrais précédemment. En fait, il ne faut surtout pas désactiver les index.
    Mais il fait que tu fasses l'insertion (s'il s'agit de cela) en tenant compte des contraintes que tu as.
    Maintenant, tu dis vouloir faire un insert. Mais si la ligne existe déjà, il serait mieux de faire un update.

    Bon, je sens que tout va se compliquer.
    1) est-ce que la ligne que tu désires insérer existe déjà ?
    2) est-ce que tu désires la modifier ou pas ?
    3) qu'est-ce que tu désires faire au final ? Je ne parle pas de la concaténation, mais de ton intervention dans la table "model".

    Précédemment, tu disais :
    Citation Envoyé par Coeur de Pirat
    ... par contre il me dit 'nom_prénom' est une clé unique. Donc quand je fais la concaténation nom_prénom il est pas content !
    Pourquoi avoir mis un unique index pour cette colonne ?

    Il serait bon de me communiquer le descriptif de toutes les tables qui entre dans le insert ... select.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  17. #17
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    Salut Aretmus : Voila j'explique:
    C'est quoi au juste ce "numero"
    Ce n'est rien d'autre qu'un exemple , le type c'est Varchar() et c'est une valeur comme tel 'L15A1', l'indexe UNIQUE se trouve sur cette colonne "numero"
    Oui les lignes existe déjà ! c'est un transfert d'une table à une autre (mais pas la table entière juste une colonne)
    Non , je veux juste ajouter des données à cette colonne "numero" de la table model

  18. #18
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    Il me semble qu'il va falloir faire un ajout qui prend en compte la contrainte d'unicité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE model 
    ADD CONSTRAINT UQ_model_numero 
      UNIQUE (numero)
    Mais je sais pas comment l'ajouter dans la requête et si la syntaxe est bonne !!

  19. #19
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    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 378
    Points : 19 055
    Points
    19 055
    Par défaut
    Salut Coeur de Pirat.

    C'est Artemus et non Aretmus.

    Citation Envoyé par Coeur de Pirat
    c'est un transfert d'une table à une autre (mais pas la table entière juste une colonne)
    Si c'est juste une colonne à mettre à jour, tu vas te retrouver avec les deux cas, la ligne existe (faire un update) ou la ligne n'existe pas (faire un insert).

    La solution est de faire un insert ... select ... on duplicate key update ....
    Tu trouveras quelques explications ici : http://dev.mysql.com/doc/refman/5.7/en/insert.html

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT  INTO `base_configuration`.`model` (numero,id_image,id_nature,id_constructeur)              
    SELECT  CONCAT(nom,'-', prenom) as numero ,
    4 as id_image,
    2 as id_nature,
    236 as id_constructeur 
    from `base_configuration`.`type_capteur`
    on duplicate key update numero = CONCAT(nom,'-', prenom);
    As-tu besoin d'un exemple ou cela te suffit ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE model 
    ADD CONSTRAINT UQ_model_numero 
      UNIQUE (numero)
    Qu'est-ce que tu cherches à faire ?
    Je te rappelle que tu as un problème d'unicité sur la colonne numero.
    A priori, il n'est pas nécessaire d'ajouter quoi que ce soit d'autre.

    Si c'est la syntaxe exacte que tu recherches, voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX `idx` USING BTREE ON `test` (`col2`);
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table `test` drop index `idx`, add index `idx` (`col2`);
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  20. #20
    Membre habitué Avatar de Coeur de Pirat
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 82
    Points : 150
    Points
    150
    Par défaut
    Aretmus Désolé faute de frappe

    J'étais absorbé par les scripts

    Merci infiniment , enfin ça marche grâce à ton aide , j'ai juste ajouté le ON DUPLICATE KEY UPDATE Et bingo

    Super ! ce n'est que le début mais au moins je vais pouvoir passer à autre chose
    Merci encore Artemus

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/06/2010, 12h32
  2. Réponses: 8
    Dernier message: 27/08/2009, 13h01
  3. Réponses: 2
    Dernier message: 20/10/2007, 02h24
  4. Réponses: 3
    Dernier message: 15/06/2007, 22h50
  5. Réponses: 9
    Dernier message: 05/07/2005, 08h37

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