2013-11-21 5 views
0

Я пытаюсь сделать внутреннее соединение между 3 таблицами в созданной мной ERD. Я успешно построил подзапросы 3 - 3 слоя, используя эти таблицы, и когда я исследовал эту проблему, могу сказать, что в моем DDL я не использовал двойные кавычки, поэтому столбцы не чувствительны к регистру. Объединение не является моим сильным сюитом, поэтому любая помощь будет высоко оценена. Это запрос, который я вставляю, и ошибка, которую он мне дает. Все ответы, которые я видел, когда люди делают внутренние соединения, используют синтаксис «INNER JOIN», но меня это не учили? Мой метод все еще в порядке?ORA-00904 INVALID IDENTIFIER with Inner Join

SQL> 
SELECT regional_lot.location, 
     rental_agreement.vin, 
     rental_agreement.contract_ID 
FROM regional_lot, 
    rental_agreement 
WHERE regional_lot.regional_lot_id = vehicle1.regional_lot_ID 
    AND vehicle1.vin = rental_agreement.vin; 


        * 
ERROR at line 1: 
ORA-00904: "VEHICLE1"."VIN": invalid identifier 

ответ

2

Для начала, вы не vehicle1 в вашем FROM списке.

Вы должны дать ANSI присоединиться к попытке. С одной стороны, они намного более читаемым и не загрязнить пункт WHERE с условиями соединения

SELECT regional_lot.location, rental_agreement.vin, rental_agreement.contract_ID 
FROM rental_agreement 
INNER JOIN vehicle1 
    ON rental_agreement.vin = vehicle1.vin 
INNER JOIN regional_lot 
    ON vehicle1.regional_lot_ID = regional_lot.regional_lot_id; 
+0

Хорошо, я дам ему попробовать, я был под впечатлением, вы только должны были перечислить таблицы в «FROM», если вы перечисляете информацию из этой таблицы после того, как «выбрать» часть заявления. – Tim

+0

@MatthewClenney Все ссылочные таблицы должны быть включены через предложение FROM или через соединения – Phil

+0

Так что ваше заявление сработало, и его гораздо легче читать! Единственное, что меня смущает, похоже, что вы распространили «из» источников таблицы на весь запрос. Вы просто «INNER JOIN ON .PK = .FK? – Tim

1

вы Форе добавить таблицу vehicle1 в разделе "из" в запросе:

from regional_lot, rental_agreement, vehicle1 
0

Похоже, вы пропустили, чтобы присоединиться к таблице VEHICLE1. Также вы можете использовать псевдоним для имен таблиц. Попробуйте, как это,

SELECT regional_lot.location, 
     rental_agreement.vin, 
     rental_agreement.contr act_ID 
FROM regional_lot a, 
     rental_agreement b, 
     vehicle1 c 
WHERE a.regional_lot_id = c.regional_lot_ID 
AND c.vin     = b.vin;