我是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 张表:Contract
和Customer
.
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
确保在外键上联接主键。