#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 для объединения основных сведений. Разве данная покупка не всегда совершается одним клиентом?