支持 sql 连接语句



我是SQL和Oracle Apex的新手。最初,我得到了这个工作片段:

SELECT Contract_no, customer_code, Start_Date, End_Date
FROM Contract

我试图将这段代码添加到其中:

INNER JOIN Customer
ON Contract.customercode = Customer.Customername

添加代码后,我收到了Oracle/PLSQL:ORA-06550错误消息,其中指出:

无效的用户.表列或列规范。

我正在尝试使用 JOIN 语句将客户表中的客户名称添加到合同表中。

我基本上有 2 张表:ContractCustomer.

Customer包含以下列

  • 客户代码
  • 客户名称
  • 地址
  • 邮政编码
  • 电话

Contract包含以下列

  • 合约编号
  • 客户代码
  • 开始日期
  • 结束日期

第二个样本的字段名称错误。

Contract.customercode应该是Contract.customer_code的,如果数据库中的命名约定一致,那么Customer.Customername应该Customer.customer_name。但是,您可能不想使用customer_name。鉴于两个表都包含customer_code字段,您可能打算基于这些字段进行联接。联接某人姓名与其代码相同的记录不太可能产生良好的结果。

所以你的最后一行将是

ON Contract.customer_code = Customer.customer_code

我认为其中一个列名中有一个空格。 请使用 DESC 命令发布列定义。 如果有空格,则需要在整个代码中引用带有引号的此类列,这并不理想。 Oracle 不建议使用带引号的标识符,因此列名中不允许有空格。 请使用别名来标识 select 语句中的列名,并在整个查询过程中使用一致的列名。 这将有助于代码维护和更好的代码可读性。

下面是我尝试的一小段代码供您参考。

CREATE TABLE customer(
customer_code VARCHAR2(10),
customer_name  VARCHAR2(10),
address        VARCHAR2(100),
postcode       VARCHAR2(10),
telephone      VARCHAR2(10));

CREATE TABLE contract(
contract_no     NUMBER, 
customer_code   VARCHAR2(10), 
start_date      DATE,
end_date        DATE
);

INSERT INTO customer
values ('1','Person 1','Address 1','12345A','0000000000');
INSERT INTO contract
VALUES(1,'1','01-JAN-2010','31-DEC-2019');
SELECT con.contract_no, cust.customer_code, con.start_date, con.end_date
FROM contract con
INNER JOIN customer cust
ON con.customer_code = cust.customer_code;
Output:
CONTRACT_NO CUSTOMER_C START_DAT END_DATE 
----------- ---------- --------- ---------
1 1          01-JAN-10 31-DEC-19

呵呵

尝试

SELECT Contract_no, customer_code, Start_Date, End_Date
FROM Contract
INNER JOIN Customer
ON Contract.customer_code = Customer.customer_code

确保在外键上联接主键。

最新更新