【问题标题】:Need help writing a query Oracle SQL需要帮助编写查询 Oracle SQL
【发布时间】:2019-10-11 12:36:36
【问题描述】:

编写查询以显示人员 ID、费用代码、专科 ID、专科名称、咨询日期、患者编号和到期日将使用咨询日期 + 21 计算

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

SELECT staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "Due >Date"
*
第 1 行出现错误:
ORA-00918: 列定义不明确
连接到:
Oracle Database 12c 标准版版本 12.1.0.2.0 - 64 位生产
SQL> 描述专业
名称空?输入


SPECID NOT NULL CHAR(4)
规格名称 VARCHAR2(25)
SPECNOTES VARCHAR2(100)
SQL> 描述 Staffid
错误:
ORA-04043: 对象 Staffid 不存在
SQL> 描述人员
名称空?输入


STAFFID NOT NULL CHAR(2)
名字 VARCHAR2(20)
姓氏 VARCHAR2(20)
角色 VARCHAR2(15)
性别字符(1)
加入日期
日期 SQL> 描述人员专业 错误:
ORA-04043: 对象 staffspeciality 不存在
SQL> 描述人员_专业
名称空?输入


STAFFID NOT NULL CHAR(2)
SPECID NOT NULL CHAR(4)
DATEQUALIFIED NOT NULL DATE
有效日期
详情 VARCHAR2(100)
SQL>描述咨询 名称空?输入


CHRGCODE NOT NULL CHAR(7) STAFFID NOT NULL CHAR(2) DATECONSULTED NOT NULL DATE 开始时间编号 (4,2)
患者编号 CHAR(7)
SQL> SELECT staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "到期日"
2 FROM staff_speciality,员工,专业,咨询;
SELECT staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "到期日"
*
第 1 行出现错误:
ORA-00918: 列定义不明确

【问题讨论】:

  • 提示:JOINON从不FROM 子句中使用逗号。
  • 我用什么?你能举个例子吗
  • 并使用相关表的别名对列进行别名,例如SELECT s.staffid .... from staff_speciality ss join staff s on s.staffid = ss.staff_id ....
  • 你能举个例子吗,我不知道该怎么做。或者你能链接一个可以帮助我的网站吗?
  • @BarbarosÖzhan 我一点也不明白...... :( 你为什么要在 Staffid 中添加 s.?什么是 ss?你为什么要让 s.staffid = ss.staff_id?

标签: sql oracle


【解决方案1】:

您可以使用 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 是由于这个错误而引发的。

【讨论】:

  • SQL> SELECT s.staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "截止日期" 2 FROM staff_speciality ss, 3 JOIN staff s ON s.staffid = ss.staffid 4 JOIN special sp ON sp.specid = ss.specid 5 加入咨询 c ON c.staffid = s.staffid 6 ; JOIN staff s ON s.staffid = ss.staffid * ERROR at line 3: ORA-00933: SQL command not properly end
  • @Reece 对不起,我意识到我在staff_speciality ss 后面忘记了一个逗号
  • SQL> SELECT s.staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "截止日期" 2 FROM staff_speciality ss, 3 JOIN staff s ON s.staffid = ss.staffid 4 JOIN special sp ON sp.specid = ss.specid 5 加入咨询 c ON c.staffid = s.staffid; JOIN staff s ON s.staffid = ss.staffid * ERROR at line 3: ORA-00933: SQL command not properly end
  • @Reece 你仍然发送相同的文本,我已经删除了逗号。
  • 对不起,我错过了理解,那个。它现在可以工作了,非常感谢!
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多