Как получить товары покупателя? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть две таблицы:

  • покупатель (customer_id (PK), имя, фамилия, телефон)
  • заказов (идентификатор заказа (PK), наименование товара, количество)

С customer_id = order_id (один order_id на клиента, который идентифицирует клиента).

Внутри моей базы данных есть:

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);

Как я могу получить список товаров, купленных конкретным клиентом? Например, Колин купил 2 салфетки, лампу и 3 конфеты. Правильным выводом будет (без повторения first_name):

Имя - Имя товара - Количество

Колин - Ткани - 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;

Но это показывает всех клиентов, а не конкретного ... Проблема также лежит в: WHERE customer.customer_id = orders.order_id? Потому что если у клиента может быть много заказов, если я добавлю больше вещей в таблицу заказов, то мое предложение WHERE не будет иметь смысла?

Есть идеи, чтобы очистить мою путаницу? спасибо

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Нет связи между двумя таблицами, из которых вы хотите объединить данные.Пожалуйста, создайте отношение внешнего ключа между двумя таблицами, которое поможет вам получить общее значение, на основе которого вы можете извлекать данные.

Например: - столбец Customer_id из таблицы клиентов может быть внешним ключом в заказах таблицы, которыйбудет указывать заказ, размещенный каждым клиентом.

Следующий запрос должен вернуть вам ожидаемый результат:

SELECT customer.first_name, customer.last_name, orders.item_name, orders.quantity FROM customer,orders WHERE customer.customer_id = orders.customer_id ORDER BY customer.first_name;

Указанный вами запрос не возвращает никакого результата, поскольку в обеих таблицах нет совпадений ни для какого заказа, ни для идентификатора клиента, поскольку в обеих из них изображены дваразные значения.

Надеюсь, это поможет.Ура!

0 голосов
/ 12 ноября 2018

В вашем последнем запросе вы показали, что ваши таблицы связаны (customer.customer_id = orders.order_id), но в созданных вами таблицах нет связи между ними. Я думаю, что это должно работать:

Шаг 1. Создайте таблицу Customer следующим образом:

    Create table customer
   (customer_id id primary key,
   first_name  varchar(25),
   last_name   varchar(25),
   phone   int);

Шаг 2. Создайте таблицу элементов следующим образом:

    Create  table Items  
    (item_id  primary key,
    item_name   varchar(25));

Шаг 3. Создайте таблицу ссылок, которая связывает две таблицы выше, следующим образом:

      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;

Пожалуйста, попробуйте и дайте мне знать, если есть какие-либо проблемы.

0 голосов
/ 12 ноября 2018

Модель данных неверна. Должно быть что-то вроде этого:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...