【问题标题】:ORA-00904: invalid identifier in Oracle SQLORA-00904: Oracle SQL 中的标识符无效
【发布时间】:2021-02-25 06:30:40
【问题描述】:

我可能在 Oracle 和 MySQL 之间搞砸了,因为我是新手,所以我真的搞不清楚。 我有一张桌子

CREATE TABLE Patient_Dtls(
    Patient_ID varchar2(10) PRIMARY KEY,
    First_Name varchar2(20) NOT NULL,
    Last_Name varchar2(20) NOT NULL,
    Contact_Number INT,
    Gender char(1),
    check(Gender in ('M', 'F'))
    );

还有一张桌子

CREATE TABLE Claim_Dtls(
    Claim_ID varchar2(10) PRIMARY KEY,
    Patient_ID varchar2(10) references Patient_Dtls(Patient_ID) ,
    Hospital_ID varchar2(10) references Hospital_Dtls(Hospital_ID),
    Amount_Submitted NUMBER(10,2) NOT NULL,
    Amount_Approved NUMBER(10,2),
    Status varchar2(20)
    check(Status in ('Submitted', 'Approved'))
    

我的问题是: 编写一个选择查询以查看给定患者 ID 的索赔和患者详细信息

我使用的查询是:

Select * from Patient_Dtls,Claim_Dtls 
INNER JOIN Claim_Dtls 
    ON Patient_Dtls.Patiend_ID = Claim_Dtls.Patient_ID 
where Patient_ID = 111

对不起,如果这是一个毫无根据的问题。期待帮助

【问题讨论】:

  • '如果在存在连接条件的情况下将逗号连接与其他连接类型混合使用,则可能会出现格式为 Unknown column 'col_name' in 'on Clause' 的错误' - dev.mysql.com/doc/refman/8.0/en/join.html - 你已经调用了两次 claim_dtls
  • 永远不要使用SELECT *。只需命名(并限定)您想要返回的列

标签: mysql sql oracle


【解决方案1】:

你有一些问题:

SELECT *
  FROM Patient_Dtls                          /*, no comma, just ANSI syntax */
       /*Claim_Dtls      <-- remove it */
       INNER JOIN Claim_Dtls
          ON Patient_Dtls.Patient_ID = Claim_Dtls.Patient_ID /* fix the column name*/
 WHERE Patient_Dtls.Patient_ID = 111            /* add the table identifier */

此外,您可能会发现使用表别名很有用:

SELECT *
  FROM Patient_Dtls P
       INNER JOIN Claim_Dtls C
          ON P.Patient_ID = C.Patient_ID
 WHERE P.Patient_ID = 111

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多