需要帮助编写查询Oracle SQL

时间:2019-05-24 23:45:32

标签: sql oracle

编写查询以显示员工编号,费用代码,专业ID,专业名称,咨询日期,患者编号和到期日将使用咨询日期+ 21

SELECT
    staffid, 
    chrgcode,
    dateconsulted,
    patientno,
    (dateconsulted + 21) "Due Date"
FROM
    staff_speciality,
    staff,
    speciality,
    consultation;
  

SELECT Staffid,chrgcode,已咨询日期,patientno((已咨询日期+ 21)“到期>日期”
     *
     第1行出现错误:
     ORA-00918:列定义不明确
     连接到:
     Oracle Database 12c标准版12.1.0.2.0-64位生产版本
     SQL>描述特殊性
     名称为空?键入

     
     

SPECID NOT NULL CHAR(4)
     SPECNAME VARCHAR2(25)
     声明VARCHAR2(100)
     SQL>描述staffid
     错误:
     ORA-04043:对象Staffid不存在
     SQL>描述人员
     名称为空?键入

     
     

STAFFID NOT NULL CHAR(2)
     FIRSTNAME VARCHAR2(20)
     姓氏VARCHAR2(20)
     角色VARCHAR2(15)
     GENDER CHAR(1)
     DATEJOINED DATE
     DATELEFT DATE      SQL>描述人员专长      错误:
     ORA-04043:不存在对象人员专长
     SQL>描述staff_speciality
     名称为空?键入

     
     

STAFFID NOT NULL CHAR(2)
     SPECID NOT NULL CHAR(4)
     DATEQUALIFIED NOT NULL DATE
     VALIDTILLDATE DATE
     细节VARCHAR2(100)
     SQL>描述咨询      名称为空?键入

     
     

CHRGCODE NOT NULL CHAR(7)      STAFFID NOT NULL CHAR(2)      DATECONSULTED NOT NULL DATE      STARTTIME NUMBER(4,2)
     PATIENTNO CHAR(7)
     SQL> SELECT staffid,chrgcode,dateconsulted,Patientno,(dateconsulted + 21)“到期日期”
     2 FROM人员_专业,人员,专业,咨询;
     SELECT staffid,chrgcode,dateconsulted,patientno,(dateconsulted + 21)“到期日”
     *
     第1行出现错误:
     ORA-00918:列定义不明确

1 个答案:

答案 0 :(得分:0)

您可以使用ANSI-92语法构造这样的查询

SELECT s.staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "Due Date"
  FROM staff_speciality ss 
  JOIN staff s ON s.staffid = ss.staffid
  JOIN speciality sp ON sp.specid = ss.specid
  JOIN consultation c ON c.staffid = s.staffid

在选择列表中为staffid列加上别名(您也可以显式别名每个列)的情况下尤为重要,因为三个表具有该列作为公用列,如果未指定,Oracle将无法知道哪个表的列是选择时没有别名,并且由于该错误而引发ORA-00918: column ambiguously defined