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

SQL Firebird Discussion :

Update entre 2 tables


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Par défaut Update entre 2 tables
    Bonjour à tous,

    Peut-on faire un update d'une colonne d'une table à partir d'une colonne d'une autre table ?
    Si oui comment et si non que faut-il faire ?

    Merci

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    y a t'il une colonne commune aux deux tables ? (Identifiant/clé etrangère)

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Par défaut
    oui, j'ai le même identifiant unique dans chaque table.

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    J'essayerai un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Upate TableDestination TD set TD.ColonneDest=(select TO.ColonneOrigine from TableOrigine TO where TO.IDOrigine= TD.IDDestination);

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Par défaut
    Merci, mais cela ne fonctionne pas. IB renvoie ce message d'erreur : 'multiple rows in singleton select'.
    C'est d'autant plus frustrant que j'y suis parvenu en passant par ODBC et Access ! Pour info, voici le SQL :
    update TBL_DESTINATION inner join TBL_ORIGINE on id_destination=id_origine set chp_destination=chp_origine
    .

  6. #6
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    en français ça veux dire que le sous select (celui avec le WHERE) rapporte plusieures lignes. Donc il existe plusieurs TO.IDOrigine pour un TD.IDDestination.

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Par défaut
    Je ne comprends pas la même chose que toi. Pour moi, la sous-requête renvoie bien ce qu'on lui demande à savoir une ligne par identifiant commun (j'ai bien une relation de un à un entre les 2 tables). Le problème, je crois, c'est que l'on essaie d'affecter à un champ le résultat de la sous-requête (et dans le cas présent un peu plus de 1000 lignes). En fait on ne parvient pas à faire la jointure entre l'identifiant de la table destination et l'identifiant de la sous-requête.

  8. #8
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Non tu n'as pas compris, le sous select ayant une clause where ne rapporte (et ne doit rapporter) qu'une seule valeur.

    et le message d'erreur vient du fait qu'il en rapporte plusieurs...

    2eme on ne peux pas faire de jointure dans un update.

    donc pour vérifier ma théorie il suffit d'exécuter cet ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select TD.ColonneDest  from TableDestination TD inner join TableOrigine TO on (TO.IDOrigine= TD.IDDestination)
    group by TD.ColonneDest
    having count(TD.IDDestination)>1;

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Par défaut
    Mille excuses Barbibulle, tu avais raison ! J'étais persuadé que la table que l'on m'avait fournie était nickel et j'ai eu le tort de ne pas vérifier : un enregistrement en double...
    Du coup j'ai effectué la 1ère requête que tu préconisais et cela fonctionne. Merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/11/2007, 18h08
  2. Syntaxe Update entre deux tables
    Par lenoil dans le forum SQL
    Réponses: 5
    Dernier message: 02/10/2007, 16h12
  3. Update entre une table et une vue
    Par Tintou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/09/2007, 21h35
  4. update entre 2 tables
    Par alexkickstand dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/05/2007, 17h52
  5. UPDATE entre 2 tables
    Par dafalri dans le forum Requêtes
    Réponses: 12
    Dernier message: 29/11/2005, 15h12

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