2010-02-05 11 views
0

Je l'instruction SQL suivante:Oracle PL/SQL: référencement à un nom de colonne dans la requête jointe intérieure


SELECT * 
FROM cars car 
     LEFT JOIN (SELECT * 
        FROM cars auto 
         LEFT JOIN steeringwheels sw 
          ON auto.steeringwheelid = sw.ID 
        WHERE material = 'leather') innertable 
     ON innertable.ID = car.ID 
     LEFT JOIN steeringwheels sw 
     ON auto.steeringwheelid = sw.ID 
WHERE sw.material='plastic' 

Cette requête fournit les colonnes de la table « Cars » deux fois, mais avec des valeurs différentes pour la ID de la table Car (le but de la requête est de mapper les valeurs pour voir ce que le Car.ID serait id le matériau passerait du cuir au plastique).


------------------------------------ 
| ID | material | ID_1 | material_1 | 
------------------------------------- 
| 1 | leather | 4 | plastic | 
| 2 | leather | 7 | plastic | 
------------------------------------- 

Cependant, je voudrais sortie que les colonnes d'identité (pas les colonnes matérielles), comme ceci:


------------- 
| ID | ID_1 | 
------------- 
| 1 | 4 | 
| 2 | 7 | 
------------- 

Je n'ai pas été en mesure de le faire, comme je l'ai pas trouvé un moyen de se référer à la colonne ID de la requête interne de quelque manière que ce soit. Par exemple


SELECT id, innertable.id 
(...) 

ou


SELECT id, auto.id 
(...) 

ou


SELECT id, id_1 
(...) 

ne semblent pas fonctionner. Comment peut-on y parvenir?

Répondre

1

Essayez de répertorier explicitement les noms de colonnes de la table interne dans l'instruction select. Comme:

...(SELECT auto.ID autoid, auto.Whatever).... 

puis dans le principal, sélectionnez:

SELECT innertable.autoid .... 
1

Est-ce que vous êtes après?

SELECT auto_id, steeringwheel_id 
    FROM cars car 
     LEFT JOIN (SELECT auto.ID AS auto_id, sw1.id AS steeringwheel_id 
        FROM cars auto 
         LEFT JOIN steeringwheels sw1 
          ON auto.steeringwheelid = sw1.ID 
        WHERE material = 'leather') innertable 
     ON innertable.auto_ID = car.ID 
     LEFT JOIN steeringwheels sw2 
     ON auto.steeringwheelid = sw2.ID 
    WHERE sw.material='plastic'