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

Langage SQL Discussion :

UPDATE d'une table à partir des résultats d'une requête


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 38
    Points
    38
    Par défaut UPDATE d'une table à partir des résultats d'une requête
    Bonjour à toutes et à tous,
    par avance veuillez m'excusez si je ne suis pas dans le bon forum...
    Voilà,
    je suis en train de manipuler une base de donnée "DBISAM" à l'aide de EMS DBISAM Manager

    J'ai deux tables:
    - "TABLE1" ayant comme colonnes ID_TABLE1 et PRIX
    - "TABLE2" ayant comme colonnes ID_TABLE2 et PRIX_UNITAIRE.

    J'aimerais mettre à jour la table "TABLE1" à partir des résultats d'une requête sur TABLE2, de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TABLE1
    SET PRIX = (REQUETE_TABLE2).SOMME
    WHERE
    ID_TABLE1 = (REQUETE_TABLE2).ID_TABLE2
    La requete sur la TABLE2 se présenterait de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ID_TABLE2, SUM (PRIX_UNITAIRE) AS SOMME
    FROM TABLE2
    GROUP BY ID_TABLE2
    (si j'execute cette requête sur la TABLE2, je vois bien les résultats sous forme de tableau ayant comme colonnes ID_TABLE2 & SOMME)

    J'ai donc essayé cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE TABLE1
    SET PRIX = RESULTAT.SOMME
    FROM TABLE1, 
    (SELECT ID_TABLE2, SUM (PRIX_UNITAIRE) AS SOMME
    FROM TABLE2
    GROUP BY ID_TABLE2) RESULTAT
    WHERE 
    TABLE1.ID_TABLE1 = RESULTAT.ID_TABLE2
    mais celà ne marche pas...

    Pouvez-vous m'indiquer une marche à suivre ?

    Excusez moi encore pour cette question de débutant, mais j'essaye de me débrouiller tant bien que mal.

    Merci par avance !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 389
    Points
    28 389
    Par défaut
    Citation Envoyé par pascal_06 Voir le message
    celà ne marche pas...
    C'est un peu court...
    La syntaxe n'est pas prise en charge par ton SGBD ? (message d'erreur)
    La requête s'exécute mais ne donne pas le résultat attendu ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 430
    Points : 1 126
    Points
    1 126
    Par défaut
    Bonjour,

    en lisant ta requête, je comprends que cela ne marche pas.
    Moi, je l'aurais écrite comme ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table1
    SET prix = (SELECT SUM (prix_unitaire) AS somme
                       FROM table2 WHERE table2.id_table2 = table1.id_table1)
    WHERE id_table1 in  (SELECT DISTINCT ID_TABLE2  FROM TABLE2)
    NB Sur ma base (SQLITE) ça marche

    Cordialement

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par acaumes Voir le message
    Bonjour,

    en lisant ta requête, je comprends que cela ne marche pas.
    Moi, je l'aurais écrite comme ceci...

    NB Sur ma base (SQLITE) ça marche

    Cordialement
    Bonsoir Acaumes,
    je viens d'essayer ta requête et ça ne marche pas non plus...
    Voici le message que j'obtiens :
    DBISAM Engine Error # 11949 SQL parsing error - Expected ) but instead found SUM in UPDATE SQL statement at line 1, column 36
    Pour répondre également à Al1_24, c'est à peu près ce message que j'obtenais pour ma requête... Je vais essayer à nouveau !

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par acaumes Voir le message
    Bonjour,

    en lisant ta requête, je comprends que cela ne marche pas.
    Moi, je l'aurais écrite comme ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table1
    SET prix = (SELECT SUM (prix_unitaire) AS somme
                       FROM table2 WHERE table2.id_table2 = table1.id_table1)
    WHERE id_table1 in  (SELECT DISTINCT ID_TABLE2  FROM TABLE2)
    NB Sur ma base (SQLITE) ça marche

    Cordialement
    Il suffit de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1
    SET prix = (SELECT SUM (prix_unitaire) AS somme
                       FROM table2 WHERE table2.id_table2 = table1.id_table1)
    Mais, il y a une chose, est ce que ce SGBD accepte les sous requêtes????????

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    Il suffit de mettre :
    Mais, il y a une chose, est ce que ce SGBD accepte les sous requêtes????????
    Bonjour,
    là c'est une bonne question, mais je ne saurai répondre !
    En fait,
    je voudrais transférer les données d'un programme X vers un programme Y.
    Ni le programme X, ni le Y ne comporte de fonctions d'importation / exportation.
    Le programme X a été écrit en Windev et utilise une base Hyperfile. J'ai réussi à exporter les données de cette base vers un fichier XLS grâce à un utilitaire : File2Data...
    Le programme y a été écrit en Delphi, et utilise un moteur fourni par Elevate Software
    Grace à DBISAM Manager, j'ai réussi à importer les données depuis le fichier XLS, mais il me reste pas mal de manipulations à faire!

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    Il suffit de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1
    SET prix = (SELECT SUM (prix_unitaire) AS somme
                       FROM table2 WHERE table2.id_table2 = table1.id_table1)
    Où comment avoir des données de la table1 à null suite à l'update.

    Les deux requêtes ne font pas la même chose.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Bonjour à tous,
    comme je ne voulais pas perdre trop de temps, j'ai procédé autrement, et je suis arrivé à mes fins (bon, c'est un peu la "méthode bourrin"...)

    - J'ai exporté les résultats de ma requête sur la TABLE2 vers un fichier excel.
    - Puis, dans la TABLE1, j'ai importé le fichier Excel en choisissant "Update".

    Toutes ces fonctions sont disponibles dans DBISAM Manager. Si vous voulez plus de renseignement je peux faire des captures d'écrans.

    Le sujet est donc résolu, cependant, je ne le ferme pas car j'aimerais quand même réussir à faire la même chose avec une requête (par curiosité !)

  9. #9
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Tu as raison punkoff, si on ne met pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id_table1 IN  (SELECT DISTINCT ID_TABLE2  FROM TABLE2)
    le champ prix va être mis à jour par des null;

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/02/2012, 16h15
  2. [AC-97] Création d'une table à partir des résultats d'une requete analyse croisée
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/11/2009, 21h46
  3. Update d'une table à partir des données d'une autre
    Par gregoryacf dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/04/2008, 14h02
  4. Réponses: 8
    Dernier message: 11/08/2006, 09h30
  5. Réponses: 1
    Dernier message: 23/01/2006, 18h53

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