Sql 如何购买客户的物品?
我有两张桌子: 客户客户id主键、姓名、姓氏、电话 订单编号主键、项目名称、数量 如果customer\u id=order\u id,则每个客户有一个订单id,用于标识客户 在我的数据库中,我有:Sql 如何购买客户的物品?,sql,database,oracle,Sql,Database,Oracle,我有两张桌子: 客户客户id主键、姓名、姓氏、电话 订单编号主键、项目名称、数量 如果customer\u id=order\u id,则每个客户有一个订单id,用于标识客户 在我的数据库中,我有: INSERT INTO customer(first_name, last_name, phone) VALUES ('Colin', 'Farell', '123453'); INSERT INTO customer(first_name, last_name, phone) VALUES ('A
INSERT INTO customer(first_name, last_name, phone) VALUES ('Colin', 'Farell', '123453');
INSERT INTO customer(first_name, last_name, phone) VALUES ('Aaron', 'Smith', '123451');
INSERT INTO customer(first_name, last_name, phone) VALUES ('Becky', 'Roberts', '123452');
INSERT INTO orders(item_name, quantity) VALUES ('Tissues', 2);
INSERT INTO orders(item_name, quantity) VALUES ('Lamp', 1);
INSERT INTO orders(item_name, quantity) VALUES ('Chocolate', 3);
如何获取特定客户购买的物品列表?例如,科林买了两张纸巾、一盏灯和三块巧克力。
正确的输出不会重复第一个\u名称:
第一个名称-项目名称-数量
科林-组织-2
科林灯-1
科林-巧克力-3
我试过:
SELECT customer.first_name, customer.last_name, orders.item_name, orders.quantity
FROM customer, orders
WHERE customer.customer_id = orders.order_id
ORDER BY customer.first_name;
但它显示了所有的客户,而不是一个特定的客户。。。
问题是否也存在于:customer.customer\u id=orders.order\u id?因为如果一个客户可以有很多订单,如果我在orders表中插入更多的内容,那么我的WHERE子句就没有意义了
有什么办法来消除我的困惑吗?谢谢,数据模型是错误的。应该是这样的:
SQL> create table customer
2 (customer_id number primary key,
3 first_name varchar2(20),
4 last_name varchar2(20),
5 phone varchar2(20));
Table created.
SQL> create table items
2 (item_id number primary key,
3 item_name varchar2(20));
Table created.
SQL> create table orders
2 (order_id number primary key,
3 customer_id number constraint fk_ord_cust references customer (customer_id)
4 );
Table created.
SQL> create table order_details
2 (order_det_id number primary key,
3 order_id number constraint fk_orddet_ord references orders (order_id),
4 item_id number constraint fk_orddet_itm references items (item_id),
5 amount number
6 );
Table created.
一些快速脏样数据:
SQL> insert all
2 into customer values (100, 'Little', 'Foot', '00385xxxyyy')
3 into items values (1, 'Apple')
4 into items values (2, 'Milk')
5 into orders values (55, 100)
6 into order_details values (1000, 55, 1, 5) -- I'm ordering 5 apples
7 into order_details values (1001, 55, 2, 2) -- and 2 milks
8 select * from dual;
6 rows created.
SQL> select c.first_name, sum(d.amount) count_of_items
2 from customer c join orders o on o.customer_id = c.customer_id
3 join order_details d on d.order_id = o.order_id
4 group by c.first_name;
FIRST_NAME COUNT_OF_ITEMS
-------------------- --------------
Little 7
SQL>
或,项目清单:
SQL> select c.first_name, i.item_name, d.amount
2 from customer c join orders o on o.customer_id = c.customer_id
3 join order_details d on d.order_id = o.order_id
4 join items i on i.item_id = d.item_id;
FIRST_NAME ITEM_NAME AMOUNT
-------------------- -------------------- ----------
Little Apple 5
Little Milk 2
SQL>
您希望从中合并数据的两个表之间没有关系。请在两个表之间创建一个外键关系,这将帮助您获得一个公共值,您可以根据该值提取数据 例如,customers表中的Customer_id列可以是orders表中的外键,该外键将指定每个客户下的订单 以下查询应返回预期结果: 选择customer.first\u name、customer.last\u name、orders.item\u name、orders.quantity 来自客户、订单 其中customer.customer\u id=orders.customer\u id 按客户订购。第一名 您指定的查询不会返回任何结果,因为这两个表中的任何订单和客户id都不匹配,因为它们都描述了两个不同的值
希望能有帮助。干杯 在上一次查询中,您已显示表是链接的customer.customer\u id=orders.order\u id,但在您创建的表中,它们之间没有链接。我认为这应该奏效: 步骤1:创建客户表,如下所示:
Create table customer
(customer_id id primary key,
first_name varchar(25),
last_name varchar(25),
phone int);
Create table Items
(item_id primary key,
item_name varchar(25));
Create table Orders
(Customer_Id int,
Item_ID int,
Quantity int);
步骤2:创建项目表,如下所示:
Create table customer
(customer_id id primary key,
first_name varchar(25),
last_name varchar(25),
phone int);
Create table Items
(item_id primary key,
item_name varchar(25));
Create table Orders
(Customer_Id int,
Item_ID int,
Quantity int);
步骤3:创建与上面两个表相关的链接表,如下所示:
Create table customer
(customer_id id primary key,
first_name varchar(25),
last_name varchar(25),
phone int);
Create table Items
(item_id primary key,
item_name varchar(25));
Create table Orders
(Customer_Id int,
Item_ID int,
Quantity int);
步骤4:使用此查询提取所需信息:
select c.first_name,i.item_name,o.Quantity from
customer c inner join orders o on c.customer_id = o.customer_id
inner join items i on i.item_id = o.Item_id;
请尝试一下,如果有问题请告诉我。这是您自己创建的表吗?我看不出这两个表之间有任何关系,因此无法编写正确的查询。要将订单连接到客户,您需要对订单表中的customer表(customer_id列)进行引用。请注意,订单id是订单的唯一标识符,与客户id无关。将所有内容插入客户值100、‘Little’、‘Foot’、‘00385xxxyy’插入项目值1、‘Apple’插入项目值2、‘Milk’插入订单值55100插入订单详细信息值1000、55、1、,5-我订购了5个苹果,订单详细信息值为1001、55、2、2-和2-牛奶选择*从dual;你知道我为什么会因为一个错误而被违反唯一性约束吗?谢谢,我不知道;如你所见,在我的情况下,一切正常。如果你以我为例,你就不会犯那个错误。可能您创建了不同的主键约束,尝试插入与我不同的值。。。不知道你到底做了什么。请编辑您的初始消息问题,并复制/粘贴您自己的SQL*Plus会话,以便我了解您如何创建表、插入数据以及Oracle如何响应。