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 Oracle Discussion :

Pb sous requete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut Pb sous requete
    Bonjour,
    Je suis débutant en SQL et je voudrais savoir s'il est possible d'effectuer une sous requete qui permettrais de récupérer des valeurs de plusieurs champs d'une table "x" et de les regrouper dans un seul champ d'une table "y".
    J'éclaircit un peu ma demande en vous copiant la requête que j'ai écrit mais elle est fausse car j'obtiens une erreur: "ORA-00913: Trop de valeurs"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE veh_comm SET com = ( select veh_ente.dat_emb,veh_ente.dat_rcp,veh_ente.dat_arr,veh_ente.num_pos,veh_ente.nom_nav,veh_ente.dat_etd,veh_ente.dat_eta,veh_ente.num_voy 
    FROM veh_ente WHERE veh_ente.num_veh = 'UU1KSD0F537172220')
    WHERE num_veh='UU1KSD0F537172220';
    Merci par avance de votre support.

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Par défaut
    tu met a jour un champ donc tu doi ne recuperer que un champ de ton select , essaie plutot ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE veh_comm SET com = ( SELECT CONCAT(veh_ente.dat_emb(CONCAT(veh_ente.dat_rcp,CONCAT(veh_ente.dat_arr, ....)))) 
    FROM veh_ente WHERE veh_ente.num_veh = 'UU1KSD0F537172220')
    WHERE num_veh='UU1KSD0F537172220';

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Juste un petit point:

    L'utilisation de l'opérateur || à la place de la fonction concat() facilite l'écriture

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut re
    J'ai donc tappé ceci et cela ne fonctionne pas, il me retourne que j'ai un nombre d'arguments incorrects:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE veh_comm SET com = ( select CONCAT(veh_ente.dat_emb,CONCAT(veh_ente.dat_rcp,CONCAT(veh_ente.dat_arr,
    CONCAT(veh_ente.num_pos,CONCAT(veh_ente.nom_nav,CONCAT(veh_ente.dat_etd,CONCAT(veh_ente.dat_eta,
    CONCAT(veh_ente.num_voy))))))))
    FROM veh_ente WHERE veh_ente.num_veh = 'UU1KSD0F537172220')
    WHERE num_veh='UU1KSD0F537172220';
    J'ai lu que la fonction CONCAT fonctionnait uniquement avec des chaines de type VARCHAR2 et moi dans ce que je veux faire "dat_emb", "dat_arr", "dat_etd","dat_eta" ce sont des dates

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Il est plus simple de faire
    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
     
    UPDATE veh_comm
    SET com =
    (
      SELECT veh_ente.dat_emb ||
                 veh_ente.dat_rcp ||
                 veh_ente.dat_arr ||
                 veh_ente.num_pos ||
                 veh_ente.nom_nav ||
                 veh_ente.dat_etd ||
                 veh_ente.dat_eta ||
                 veh_ente.num_voy
      FROM veh_ente
      WHERE veh_ente.num_veh = 'UU1KSD0F537172220'
    )
    WHERE num_veh='UU1KSD0F537172220';
    Ceci dit, j'ai remarqué que les noms de certaines de ces colonnes suggèrent qu'elles ne sont pas des chaines de caractères alors il est préférable d'utiliser la conversion explicite

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut re
    OK Merci ton script fonctionne, mais maintenant il y a un autre problème:
    - c'est que les informations se mettent de bout en bout à la suite des autres comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    31/01/0729/01/0702/03/07RAN060095HOEGH TROTTER 21728/01/0723/02/07217
    hors il faudrait pouvoir mettre dat_rcp=31/01/2007, dat_arr=29/01/2007 .... et non 31/01/200729/01/2007 ....

    Merci de votre aide en tout cas

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

Discussions similaires

  1. [MySQL 4] Sous Requete IN .. SELECT ...
    Par pataluc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/09/2004, 15h54
  2. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  3. [Débutante]Sous requete
    Par mimi74 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2004, 14h02
  4. probleme de sous requete
    Par JD_Lyon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/04/2004, 22h18
  5. Requete avec une sous-requete... Ne fonctionne qu'a moitie..
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 18/08/2003, 09h54

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