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 via un select de jointure


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Par défaut update via un select de jointure
    Bonjour,
    J'aimerai faire un update sur une table via la commande select mais cet update est un ptit peu complexe car utilise des jointures.

    J'ai 2 table:
    - T1 : qui contient tous les noms de mes applications
    - T2: Les utilisateurs utilisants les application ainsi que le nom du serveur qu'utilise l'appli.

    Schéma:

    T1: Nom_APPLI
    APPLI 1
    APPLI 2
    APPLI 3

    T2: Utilisateurs / appli /serveur
    Utilisateurs Nom_Appli Server_name
    U1 APPLI1 FR
    U2 APPLI1 FR
    U3 APPLI2 VI
    J'aimerai faire un update de ma T1 en rajoutant le server_name en utilisant une jointure entre T1 et T2.

    Apres avoir fait un alter_table, j'ai tenté ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE T1
    SET server_name =
      (SELECT b.server_name
       FROM T1 a,
         T2 b
       WHERE a.nom_appli = b.nom_appli )
    J'ai effectué quelques recherches sur google et sur ce forum depuis quelque sjours mais je galère vraiment
    Je vous remercie de votre aide chez develeppez.netteurs!!

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    et quel est le SGBD? le problème? le message d'erreur ? ...

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Par défaut
    Je suis sous ORACLE 9i, et j'obtiens l'erreur ORA-01427 : single row subquery reurns more than one row.

    Bon je comprends bien cette phrase, la table T2 contient 2 fois APPLI 1. Du coup il ne sait pas lequel prendre pour updater la colonne server name qui ne contient qu'une fois Nom_APPLI.

    MAis là comment y remédier ?

    Merci pour ta réponse rapide Cybher!

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    un 'distinct' ne suffirait il pas?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faut écrire la requête de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE T1 a
    SET a.server_name = (SELECT b.server_name FROM T2 b
                         WHERE a.nom_appli = b.nom_appli)
    WHERE EXISTS (select null FROM T2 b
                  WHERE a.nom_appli = b.nom_appli)
    Il faut également qu'à une appli de t1 corresponde une seule appli de t2.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Par défaut
    @Cybher: non même erreur

    @Waldar: J'ai bien pris note pour le where exits, merci. C'est vrai qu'il ne faut pas que j'oublie cette clause. Cependant même erreur que précédemment concernant le ORA-01427
    Il faut également qu'à une appli de t1 corresponde une seule appli de t2
    Justement, il peut y avoir plusieurs fois APPLI2 dans T1 et plusisuers fois APPLI2 dans T2.
    Est-ce possible de joindre ces champs malgré tout?

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quel nom de serveur voulez-vous mettre, s'il y en a plusieurs ?

    Vous pouvez faire un max, un min ou effectivement un distinct si c'est toujours le même, mais sans avoir le contenu de vos tables c'est difficile de vous en dire plus.

Discussions similaires

  1. Select avec jointure via SQLite
    Par PetitGregory dans le forum Android
    Réponses: 8
    Dernier message: 16/08/2013, 14h13
  2. [AC-2003] Erreur avec UPDATE via les données d'une requete SELECT
    Par cpdump dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/06/2009, 12h32
  3. UPDATE SUR UN SELECT
    Par Alocer dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/10/2005, 20h09
  4. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20
  5. [ SQL ] Faire un update avec un select imbriqué
    Par zozolh2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/04/2005, 12h05

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