Неверный идентификатор с соединением, но допустимые столбцы - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь присоединиться к Заказчикам с Order_Header для Customer_ID в Oracle SQL Developer и сталкиваюсь с ошибкой «неверный идентификатор», даже если эти две таблицы действительны с существующим в обоих столбцах.

Select C.customer_name, Order_Header.total_sales, order_detail.quantity, 
C.customer_ID
From Customers C
Join Order_Header Using (Customer_ID);

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Читая ваши комментарии выше, вы продолжаете говорить, что

часть "детали заказа" должна была быть с третьим соединением, но даже с этой удаленной частью , такая же ошибка существует.

Что такое "эта часть"? Если вы имели в виду объединение с таблицей ORDER_DETAILS 1011 *, эта «часть» должна быть добавлена, а не удалена. Или вы должны удалить столбец, принадлежащий таблице ORDER_DETAILS, которого нет в предложении FROM.

Было бы полезно, если бы вы предоставили описание таблиц; Я создал их сам, используя минимальный набор столбцов, чтобы запрос работал. Посмотри.

SQL> -- CUSTOMERS: column names taken from your query
SQL> create table customers
  2    (customer_id   number constraint pk_cust primary key,
  3     customer_name varchar2(20));

Table created.

SQL> -- ORDER_HEADER: ORDER_ID must exist in order to join it with ORDER_DETAIL
SQL> create table order_header
  2    (order_id      number constraint pk_oh primary key,
  3     customer_id   number constraint fk_oh_cust references customers (customer_id),
  4     total_sales   number);

Table created.

SQL> -- ORDER_DETAIL: I added ORDER_ID as a reference to ORDER_HEADER
SQL> create table order_detail
  2    (order_id      number constraint fk_od_oh references order_header (order_id),
  3     quantity      number);

Table created.

A полный запрос, который использует все 3 таблицы, будет выглядеть так:

SQL> select c.customer_name,
  2         oh.total_sales,
  3         od.quantity,
  4         c.customer_id
  5  from customers c join order_header oh on oh.customer_id = c.customer_id
  6                   join order_detail od on od.order_id = oh.order_id;

no rows selected

По вашему запросу:

SQL> -- query you wrote, slightly formatted:
SQL> Select C.customer_name,
  2         Order_Header.total_sales,
  3         order_detail.quantity,
  4         C.customer_ID
  5  From Customers C
  6  Join Order_Header Using (Customer_ID);
       C.customer_ID
       *
ERROR at line 4:
ORA-25154: column part of USING clause cannot have qualifier

Это означает, что вы должны удалить «C.» в строке 4:

SQL> Select C.customer_name,
  2         Order_Header.total_sales,
  3         order_detail.quantity,
  4         customer_ID
  5  From Customers C
  6  Join Order_Header Using (Customer_ID);
       order_detail.quantity,
       *
ERROR at line 3:
ORA-00904: "ORDER_DETAIL"."QUANTITY": invalid identifier

Теперь у вас есть другая ошибка - вы ссылаетесь на столбец QUANTITY, который принадлежит ORDER_DETAIL, на который вы никогда не ссылались в предложении FROM; так что - уберите этот столбец из SELECT:

SQL> Select C.customer_name,
  2         Order_Header.total_sales,
  3         -- order_detail.quantity,
  4         customer_ID
  5  From Customers C
  6  Join Order_Header Using (Customer_ID);

no rows selected

Или добавьте ORDER_DETAIL к предложению FROM, которое возвращает вас к запросу, который я первоначально разместил.

0 голосов
/ 26 августа 2018

Можете ли вы запустить следующее?

Select C.* From Customers C

и

Select O.* From Order_Header O

Я думаю, вы могли пропуститьимя схемы select t.* from schema.table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...