【问题标题】:trying to create a view by joining two tables尝试通过连接两个表来创建视图
【发布时间】:2020-03-11 00:21:31
【问题描述】:

我正在尝试运行以下代码:

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": 无效标识符

  1. 00000 - “%s:无效标识符”

【问题讨论】:

    标签: sql database oracle join sql-view


    【解决方案1】:

    永远不要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;
    

    请注意,我还添加了表别名,以便查询更易于编写和阅读。

    【讨论】:

    • 好的,所以我尝试了:创建或替换视图 StoreContactPurchaseHistoryView AS select s.StoreName, StoreContactAndPhone(contact, phone), pi.PurchaseItemID, pi.PurchaseDate, pi.ItemDescription, pi.PriceUSD from store s join pi.storeid = s.storeid 上的购买项目 pi;我不断收到这个错误:“必须用列别名命名这个表达式”
    • @Snowflake22 。 . .所以给列起个名字,大概是函数调用。
    【解决方案2】:

    您正在混合显式和隐式连接,并且似乎只需要一个连接:

    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)实际上指的是什么表达式;我在查询中保持原样。

    【讨论】:

    • 表达式 StoreContactAndPhone(contact,phone) 是一个存储函数,在这种情况下连接了两个参数,即联系人和电话号码。
    • @Snowflake22:好吧,这很有意义。您至少应该为结果集中的表达式设置别名(正如 Gordon Linoff 所评论的那样)。
    【解决方案3】:

    改成这样:

    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
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-09
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多