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

Bases de données Delphi Discussion :

Firebird Update avec Jointure


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de jcharles
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut Firebird Update avec Jointure
    Bonjour,

    je voudrai d'abord souhaiter une Bonne et Heureuse année aux responsables de ce Forum ainsi qu'a toutes les personnes qui font qu'il est unique.


    Apres des recherches en vain, je souhaiterai connaitre la syntaxe pour mettre à jour le champ d'une table avec le champ d'une autre table en jointure.

    Exemple:
    j'ai une table STAT avec mon code article et le champ à remplir
    une autre table ARTFOUR avec mon code article, la reference article du fournisseur
    une autre table FOURN avec mon code fournisseur et un champ "SELEC" pour savoir quel fournisseur est selectionner.

    Il faut que je met a jour le champ à remplir dans ma table STAT avec le champ reference article fournisseur de la table ARTFOUR seulement pour les fournisseur selectionner par le champ SELEC.

    j'en suis arrivé la dans ma requete avec le message d'erreur "Multiple rows in singleton select".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE StatVte SET REFOUR =
    (Select REFA FROM Statvte INNER JOIN FORBARFO ON StatVte.NART = FORBARFO.NART 
    INNER JOIN FORBFOUR ON FORBARFO.NFOU = FORBFOUR.NFOU WHERE FORBFOUR.SELEC=-1 and (REFA is not null) group by REFA)
    si vous avez une idée.......je suis preneur.
    MERCI d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    as-tu essayé une syntaxe plus direct ? Sans passer par une sous-requête, surtout que le moteur ne risque pas d'apprécié de mettre à jour la table de sa sous-requête !

    Par Jointure explicite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE StatVte SET StatVte.REFOUR = Statvte.REFA 
    INNER JOIN FORBARFO ON StatVte.NART = FORBARFO.NART 
    INNER JOIN FORBFOUR ON FORBARFO.NFOU = FORBFOUR.NFOU 
    WHERE FORBFOUR.SELEC=-1 and (REFA is not null)
    ou
    Par Jointure à l'ancienne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE StatVte, FORBARFO, FORBFOUR 
    SET StatVte.REFOUR = Statvte.REFA 
    WHERE FORBFOUR.SELEC=-1 and (REFA is not null) 
    AND StatVte.NART = FORBARFO.NART 
    AND FORBARFO.NFOU = FORBFOUR.NFOU
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé Avatar de jcharles
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Bonjour ShaiLeTroll,

    oui j'ai déja essayé la premiére et j'ai une erreur.....
    SQL Error Code = -104
    Token unknown - Line 2, char 1
    INNER
    et pour la deuxieme que je viens d'essayé, j'ai le même type erreur
    SQL Error Code = -104
    Token unknown - Line 1, char 15
    ,
    je fait une p'tit precision concernant les tables,
    la Table ARFOUR a plusieurs articles avec le même code article mais avec une reference fournisseur differente.
    la Table STAT n'a qu'un seul code article par article.

    Merci pour ton aide.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    et une version avec un INNER implicite ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE StatVte SET StatVte.REFOUR = Statvte.REFA 
    JOIN FORBARFO ON StatVte.NART = FORBARFO.NART 
    JOIN FORBFOUR ON FORBARFO.NFOU = FORBFOUR.NFOU 
    WHERE FORBFOUR.SELEC=-1 and (REFA is not null)
    Je n'ai pas fait d'InterBase depuis 5 ans et je ne suis jamais allé très loin en SQL dessus (je générais mes requêtes en boucle, question de traçabilité et de mauvaises habitudes avec Paradox), ce que je propose c'est la syntaxe MySQL ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirmé Avatar de jcharles
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Par défaut
    Non toujours même probléme......maintenant le message d'erreur est avec JOIN.

    je sais qu'il y a les boucles mais c'est tellement plus rapide quand on peut le faire en un requête que ........

    je continue de chercher.

    MERCI

  6. #6
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    pourquoi pas une procédure stocke, surtout que tu récupère plusieurs ligne dans ton Select
    "Multiple rows in singleton select".

Discussions similaires

  1. UPDATE avec jointure
    Par warning dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 13/12/2007, 10h35
  2. Requête UPDATE avec jointure
    Par petburn dans le forum SQL
    Réponses: 7
    Dernier message: 30/07/2007, 14h22
  3. [UPDATE] avec jointure sur une requete
    Par userB dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/07/2007, 16h18
  4. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 20h31
  5. [PL/SQL] update avec jointure
    Par Fox_magic dans le forum Oracle
    Réponses: 6
    Dernier message: 09/12/2004, 12h19

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