пытаясь создать представление, объединяя две таблицы - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь запустить следующий код:

create or replace view StoreContactPurchaseHistoryView AS
select
    STORE.StoreName,
    StoreContactAndPhone(contact,phone),
    PURCHASE_ITEM.PurchaseItemID,
    PURCHASE_ITEM.PurchaseDate,
    PURCHASE_ITEM.ItemDescription,
    PURCHASE_ITEM.PriceUSD
from 
    store,
    purchase_item

left join purchase_item on purchase_item.storeid=store.storeid
;

Я получаю эту ошибку:

Сообщение об ошибке -

ORA-00904: " STORE "." STOREID ": неверный идентификатор

00000 - «% s: неверный идентификатор»

Ответы [ 3 ]

2 голосов
/ 11 марта 2020

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный , читаемый синтаксис JOIN.

Тем не менее, вы хотите что-то вроде:

select s.StoreName, StoreContactAndPhone(contact, phone) as col,
       pi.PurchaseItemID, pi.PurchaseDate,
       pi.ItemDescription, pi.PriceUSD
from store s join
     purchase_item pi
     on pi.storeid = s.storeid;

Примечание что я также добавил псевдонимы таблиц, чтобы легче было писать и читать запрос.

1 голос
/ 11 марта 2020

Измените это на:

create or replace view StoreContactPurchaseHistoryView AS
select
    STORE.StoreName,
    StoreContactAndPhone(contact,phone),
    PURCHASE_ITEM.PurchaseItemID,
    PURCHASE_ITEM.PurchaseDate,
    PURCHASE_ITEM.ItemDescription,
    PURCHASE_ITEM.PriceUSD
from 
    store

left join purchase_item on purchase_item.storeid=store.storeid
;
1 голос
/ 11 марта 2020

Вы смешиваете явные и неявные объединения, и вам, похоже, требуется только одно соединение:

create or replace view StoreContactPurchaseHistoryView AS
select
    s.StoreName,
    StoreContactAndPhone(contact,phone),
    p.PurchaseItemID,
    p.PurchaseDate,
    p.ItemDescription,
    p.PriceUSD
from 
    store s
    left join purchase_item p on p.storeid = s.storeid
;

Я использовал псевдонимы таблиц для сокращения запроса.

Примечание: неясно, что выражение StoreContactAndPhone(contact,phone) на самом деле относится к; Я оставил это как есть в запросе.

...