【问题标题】:CREATE VIEW Using multiple tablesCREATE VIEW 使用多个表
【发布时间】:2014-04-24 17:34:43
【问题描述】:

您好,尝试在 oracle 中创建视图。但是,我的代码中出现错误,我无法解决。 目前我正在尝试创建一个显示 经理,他们的名字和姓氏也分配给他们的诊所 诊所的PK和诊所地址的FK 所有地址都存储在该表中(是的,我知道这不是标准的,但这是我选择的方式) 所以我还想显示他们工作的诊所的详细地址

当然这包括两个我不确定如何实现的 WHERE 语句 第一个是 STAFFJOBNAME "MANAGER"

第二个是 ADDRESSNO 在两个表上匹配的位置

CREATE VIEW MANAGER AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, CLINIC.addressNo
    FROM STAFF,CLINIC
    WHERE addressNo = 
    (
        SELECT addressNo, addressStreet, addressCity, addressCounty, addressPostcode, addressTelephone,
        FROM ADDRESS,
        INNER JOIN CLINIC,
        ON ADDRESS.addressNo = CLINIC.addressNo
    ) AND STAFF.staffJobName = 'MANAGER';

我也有这个版本。所以我不确定哪个更接近正确的。

CREATE VIEW MANAGER
(
    AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, CLINIC.addressNo, ADDRESS.addressNo, ADDRESS.addressStreet, ADDRESS.addressCity, ADDRESS.addressCounty, ADDRESS.addressPostcode, ADDRESS.addressTelephone,
    FROM ADDRESS, STAFF,
    INNER JOIN CLINIC,
    ON ADDRESS.addressNo = CLINIC.addressNo
);

【问题讨论】:

  • 第一个示例中的查询是否运行?
  • 尝试创建第一个视图MANAGER 将抛出ORA-00913: too many values
  • 您的第二个版本存在一些问题 - 您不能在视图定义周围使用 (),并且您的尾随逗号过多 (,)。跨度>

标签: sql oracle sql-view


【解决方案1】:
CREATE VIEW MANAGERANDCLINIC    AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, ADDRESS.addressStreet, ADDRESS.addressCity, ADDRESS.addressCounty, ADDRESS.addressPostcode, ADDRESS.addressTelephone
    FROM STAFF,CLINIC, ADDRESS
    WHERE (CLINIC.CLINICMANAGERNO = STAFF.STAFFNO) AND
    (CLINIC.ADDRESSNO = ADDRESS.ADDRESSNO)
    ORDER BY CLINIC.CLINICNO;

终于找到了我自己问题的答案

【讨论】:

    【解决方案2】:

    您的第一个视图出现太多值错误,因为在您的内部查询中您返回了许多列,但在 where 子句中您只有一列。

    另外,在您的第二个代码中,请如下所示进行更改

     CREATE VIEW MANAGER
    
    AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, CLINIC.addressNo, ADDRESS.addressNo, ADDRESS.addressStreet, ADDRESS.addressCity, ADDRESS.addressCounty, ADDRESS.addressPostcode, ADDRESS.addressTelephone,
    FROM ADDRESS, STAFF
    INNER JOIN CLINIC
    ON ADDRESS.addressNo = CLINIC.addressNo;
    

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多