Oracle PL / SQL: ссылка на имя столбца во внутреннем объединенном запросе - PullRequest
0 голосов
/ 05 февраля 2010

У меня есть следующий оператор SQL:


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'

Этот запрос доставляет столбцы из таблицы «Автомобили» дважды, но с разными значениями идентификатора из таблицы «Автомобиль» (цель запроса - сопоставить значения, чтобы увидеть, какой Car.ID будет идентифицировать материал поменял бы с кожи на пластик).


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

Однако я хотел бы вывести только столбцы идентификаторов (не столбцы материалов), например:


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

Я не смог этого сделать, так как не нашел способа ссылаться на столбец ID внутреннего запроса. Например


SELECT id, innertable.id
(...)

или


SELECT id, auto.id
(...)

или


SELECT id, id_1
(...)

не похоже на работу. Как этого добиться?

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

Это то, что вы ищете?

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' 
1 голос
/ 05 февраля 2010

Попробуйте явно перечислить имена столбцов внутренней таблицы в операторе выбора. Как:

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

и затем в основном выберите:

SELECT innertable.autoid ....
...