Недопустимый идентификатор дублирующихся данных

#sql #identifier

#sql #идентификатор

Вопрос:

Мой запрос показывает все возможные комбинации результатов для этого запроса, когда я использую конструктор запросов.

 select   
     "PURCHASEDETAIL"."PMID" as "PMID",
     "PURCHASEDETAIL"."CUSTOMER_ID" as "CUSTOMERID",
     "PRODUCT"."DESCRIPTION" as "DESCRIPTION",
     "PRODUCT"."PRICE" as "PRICE",
     "PURCHASEDETAIL"."QUANTITY" as "QUANTITY",
     "SUPPLIER"."SUPPLIER_NAME" as "SUPPLIER_NAME",
     "PURCHASEMASTER"."PURCHASE_DATE_TIME" as "PURCHASE_DATE_TIME" 
 from    
     "SUPPLIER"
 left join product
 ON supplier.supplierid = product.supplierid
 left join purchasemaster
 on purchasemaster.customerid = purchasedetail.customerid
 left join purchasedetail
 on purchasedetail.pmid = purchasemaster.pmid
  

Когда я ввожу вышеуказанную информацию, чтобы извлечь информацию из таблицы 4, я получаю приведенную ниже ошибку.

ORA-00904: «PURCHASEDETAIL».»CUSTOMER_ID»: недопустимый идентификатор

Есть идеи, почему?

Ответ №1:

1) Даже если вы заменяете «CUSTOMER_ID» на «CUSTOMERID» при отображении результатов, вы все равно должны использовать «CUSTOMER_ID» (фактическое имя столбца) в условии объединения. Если у вас есть внешний запрос, который выполняет дальнейшие соединения..фильтры .. и так далее, вы можете использовать псевдоним «CUSTOMERID».

 select e.empno , d.deptno Department_No
  from scott_emp e,
       scott_dept d
  where d.Department_No = e.deptno;

ORA-00904: "D"."DEPARTMENT_NO": invalid identifier
  

Использовать..

 select e.empno , d.deptno Department_No
  from scott_emp e,
       scott_dept d
  where d.deptno = e.deptno;
  

или

 select * from 
(select deptno Department_no,dname
  from scott_dept) d,
  scott_emp e
where d.Department_no = e.deptno
  

2) Вероятно, не связано с вашим вопросом .. но..

Второе левое соединение

 <SUPPLIER>...
<PRODUCT>....
LEFT JOIN
           purchasemaster
        ON purchasemaster.customerid = **purchasedetail.customerid**
  

разве это условие не должно быть указано в supplier.customerid вместо этого? (совпадает ли имя столбца?)

__* Обновление на основе предположений о названии столбца *———

 select sup.supplier_name,
       prd.description,
       prd.price,
       prm.purchase_date_time,
       prd.pmid,
       prd.customer_id,
       prd.quantity
  from supplier sup
       left join product prd
            on (sup.supplierid = prd.productid)
       left join purchasedetail prd
            on (prd.productid = product.productid)
       left join purchasemaster prm
            on (prd.purchaseid = prm.purchaseid)
  

Комментарии:

1. В таблице поставщиков нет поля customerid

2. Хорошо .. Но после того, как вы присоединитесь к поставщику и приобретете продукт, как вы свяжете его с основным источником закупок и / или деталями покупки? Я думаю, что там отсутствует соединение.

3. я уверен, что мне не хватает ссылки, я новичок во всем этом, у purchasemaster и детали покупки есть общие ключи customerid, у поставщика и продукта есть общие ключи supplier id, есть ли способ связать оба из них внутри одного оператора select?

4. Обновил мой запрос выше .. Информация о продукте и покупке должна содержать ссылку. Если при одной покупке вы привезли три продукта (3 записи в описании продукта), между двумя таблицами должна быть ссылка (идентификатор продукта).. Вы, конечно, можете связать purchase_detail и master после этого, используя purchase_id. Не уверен, требуется ли объединение CustomerID для объединения основных сведений. Разве данная покупка не всегда совершается одним клиентом?