连接两个表将不断返回无效数字ORA-01722

时间:2018-08-12 17:09:40

标签: sql oracle

我正在尝试返回包含已下订单数量的客户名称列表。我已经尝试了许多不同的方法,但是在两个表之间没有“数量”和“名字”的公共列。

尝试仅从“客户”和“ ORDERDETAIL”表中提取数据时,它将返回ORA-01722“无效编号”。我将指出,我对此很陌生,而且在我应该学习的地方也很落后。以下是表格。

CREATE TABLE customer (
customerID NUMBER PRIMARY KEY,
firstName VARCHAR2 (30) NOT NULL,
lastName VARCHAR2 (30) NOT NULL,
address VARCHAR2 (60),
city VARCHAR2 (30),
state VARCHAR2(20),
zipCode CHAR (5),
country VARCHAR2 (50),
phone CHAR (10),
email VARCHAR2 (30) NOT NULL UNIQUE,
username VARCHAR2 (20) NOT NULL UNIQUE,
password VARCHAR2 (20) NOT NULL
);

CREATE TABLE orderInfo (
orderID NUMBER PRIMARY KEY,
customerID NUMBER REFERENCES customer (customerID),
orderDate DATE,
shipDate DATE
orderDetailID NUMBER REFERENCES orderDetail (orderDetailID)
);

CREATE TABLE orderDetail (
orderDetailID NUMBER PRIMARY KEY,
orderID NUMBER REFERENCES orderInfo (orderID),
productID VARCHAR2 (10) REFERENCES product (productID),
price NUMBER (7,2),
quantity NUMBER CHECK (quantity > 0)
);

CREATE TABLE product (
productID VARCHAR2 (10) PRIMARY KEY,
categoryID VARCHAR2 (10) REFERENCES categoryInfo (categoryID),
productName VARCHAR2 (40),
productDescription VARCHAR2 (100),
unitPrice NUMBER,
picture BLOB
);

CREATE TABLE categoryInfo (
categoryID VARCHAR2 (10) PRIMARY KEY,
categoryName VARCHAR (50),
description VARCHAR2 (100)
);

1 个答案:

答案 0 :(得分:2)

  

当尝试仅从“客户”和“ ORDERDETAIL”表中提取数据时,它将返回ORA-01722“无效编号”。

嗯,这取决于您如何编写联接。尽管正如您在帖子中所述,它们没有共同的列,所以任何联接都是错误的。

  

我正在尝试返回包含已下订单数量的客户名称列表。

您实际需要回答的所有任务似乎都是客户名称和每个客户的订单数。这意味着计算ORDERINFO记录的数量。像这样:

select c.customerID ,
       c.firstName,
       c.lastName,
       count(o.orderid) no_of_orders
from orderinfo o
     join customer c
     on c.customerID = o.customerID  
group by c.customerID ,
       c.firstName,
       c.lastName
/
相关问题