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 :

Table non reconnue dans une sous requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut Table non reconnue dans une sous requête
    Bonjour tout le monde,

    quelqu'un pourrait il m'aider pour comprendre l'erreur survenu dans la requête suivante :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     SELECT * 
      FROM TAB1 A 
      , TAB2 B 
     WHERE A.BUSINESS_UNIT= B.BUSINESS_UNIT 
       AND A.ORDER_NO = B.ORDER_NO 
       AND A.ORDER_INT_LINE_NO = B.ORDER_INT_LINE_NO 
       AND A.DEMAND_LINE_NO=1 
       AND B.DEMAND_LINE_NO <> 1 
       AND B.S1_TRAIT_STATUS = 'D' 
       AND B.S1_CONT_STATUS_H = 'V' 
       AND NOT EXISTS ( SELECT 'X' 
                      FROM TAB1 
                     WHERE BUSINESS_UNIT= B.BUSINESS_UNIT 
                       AND ORDER_NO = B.ORDER_NO 
                       AND SOURCE_BUS_UNIT=B.BUSINESS_UNIT 
                       AND INV_ITEM_ID=B.INV_ITEM_ID 
                       AND DEMAND_SOURCE='IN' 
                       AND INV_LOT_ID <> 'STOCK' )
                       AND 1= ( SELECT COUNT(*) 
    									         FROM ( SELECT DISTINCT STORAGE_AREA 
    									                FROM PS_DEMAND_PHYS_INV
                                     WHERE BUSINESS_UNIT= B.BUSINESS_UNIT 
                                     AND ORDER_NO = B.ORDER_NO 
                                     AND SOURCE_BUS_UNIT=B.BUSINESS_UNIT  
                                     AND INV_ITEM_ID=B.INV_ITEM_ID
                                    AND DEMAND_SOURCE='IN' 
    											         ) 
    									      ) ;
    Erreur :
    ORA-00904: "B"."INV_ITEM_ID" : identificateur non valide
    00904. 00000 - "%s: invalid identifier"
    Je ne comprends pas pourquoi dans la dernière sous requête la table B n'est pas reconnue.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 447
    Par défaut
    Bonjour,
    je ne sais pas si c'est lié, mais quand je vois ça dans la requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    AND INV_ITEM_ID=B.INV_ITEM_ID 
    ...
    Je me dis que la colonne existe dans plusieurs tables présentes dans la requête, et que du coup il faut le préfixer à chaque fois...

    Tatayo.

  3. #3
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    je ne sais pas si c'est lié, mais quand je vois ça dans la requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    AND INV_ITEM_ID=B.INV_ITEM_ID 
    ...
    Je me dis que la colonne existe dans plusieurs tables présentes dans la requête, et que du coup il faut le préfixer à chaque fois...

    Tatayo.
    j'ai des doutes, parce que tous les autres champs ne sont pas reconnus BUSINESS_UNIT, ORDER_NO

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    L'alias B n'est valable que sur un seul niveau de sous-requêtage or vous en avez deux.

  5. #5
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    ok merci

  6. #6
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    Citation Envoyé par mnitu Voir le message
    L'alias B n'est valable que sur un seul niveau de sous-requêtage or vous en avez deux.
    y a-t-il une solution ?

  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
    C'est difficile de vous répondre en l'état, la requête fait trente lignes et on ne connaît ni le modèle, ni les données, ni le besoin.

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par hammag Voir le message
    y a-t-il une solution ?
    Réécrire la requête.

  9. #9
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par hammag Voir le message
    y a-t-il une solution ?
    Vu que dans le deuxième étage, on sollicite exactement les même valeurs, oui : plutôt que de faire référence à B (de l'étage le plus haut), autant faire référence à t (j'ai rajouté l'alias, au deuxième étage), car de toute façon il y a égalité.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT * 
      FROM TAB1 A 
      , TAB2 B 
     WHERE A.BUSINESS_UNIT= B.BUSINESS_UNIT 
       AND A.ORDER_NO = B.ORDER_NO 
       AND A.ORDER_INT_LINE_NO = B.ORDER_INT_LINE_NO 
       AND A.DEMAND_LINE_NO=1 
       AND B.DEMAND_LINE_NO <> 1 
       AND B.S1_TRAIT_STATUS = 'D' 
       AND B.S1_CONT_STATUS_H = 'V' 
       AND NOT EXISTS ( SELECT 'X' 
                      FROM TAB1 t
                     WHERE BUSINESS_UNIT= B.BUSINESS_UNIT 
                       AND ORDER_NO = B.ORDER_NO 
                       AND SOURCE_BUS_UNIT=B.BUSINESS_UNIT 
                       AND INV_ITEM_ID=B.INV_ITEM_ID 
                       AND DEMAND_SOURCE='IN' 
                       AND INV_LOT_ID <> 'STOCK' )
                       AND 1= ( SELECT COUNT(*) 
    									         FROM ( SELECT DISTINCT STORAGE_AREA 
    									                FROM PS_DEMAND_PHYS_INV
                                     WHERE BUSINESS_UNIT= t.BUSINESS_UNIT 
                                     AND ORDER_NO = t.ORDER_NO 
                                     AND SOURCE_BUS_UNIT=t.BUSINESS_UNIT  
                                     AND INV_ITEM_ID=t.INV_ITEM_ID
                                    AND DEMAND_SOURCE='IN' 
    											         ) 
    									      ) ;

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2019, 09h42
  2. [AC-2010] Afficher les enregistrements d'une table non présents dans une requête
    Par Mauricianstyle dans le forum Access
    Réponses: 4
    Dernier message: 24/04/2015, 14h14
  3. Requête UNION dans une sous-requête, est-ce vraiment non autorisé
    Par sophie) dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 15/01/2012, 17h49
  4. Contourner le non-support de limit dans une sous-requête
    Par Christophe Charron dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/09/2007, 10h45
  5. variable non reconnue dans une requête sql
    Par sanatou dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2006, 17h43

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