postgresql отображает продукты, которые были заказаны

#postgresql

#postgresql

Вопрос:

у меня есть такие таблицы, и мне нужно отобразить продукты, которые были заказаны

 create table customer ( 
   id                   int                  primary key, 
   first_name           varchar(100)         not null, 
   last_name            varchar(100)         not null,
   city                 varchar(100)         null,
   country              varchar(100)         null,
   phone                varchar(100)         null

);

create table supplier (
   id                    int                  primary key,
   company_name          varchar(100)         not null,
   contact_name          varchar(100)         null,
   contact_title         varchar(100)         null,
   city                  varchar(100)         null,
   country               varchar(100)         null,
   phone                 varchar(100)         null,
   fax                   varchar(100)         null
);

create table product (
   id                    int                  primary key,
   product_name          varchar(100)         not null,
   unit_price            decimal(12,2)        null default 0,
   package               varchar(100)         null,
   is_discontinued       boolean              not null default false,
   supplier_id           int                  references supplier(id) not null
);

create table orders (
   id                    int                  primary key,
   order_date            timestamp            not null default now(),
   order_number          varchar(100)         null,
   total_amount          decimal(12,2)        null default 0,
   customer_id           int                  references customer(id) not null
);

create table order_item (
   id                    int                  primary key,
   unit_price            decimal(12,2)        not null default 0,
   quantity              int                  not null default 1,
   order_id              int                  references orders(id) not null,
   product_id            int                  references product(id) not null
);

 

Комментарии:

1. Совет: рассмотрите возможность использования VARCHAR(255) в качестве поля строкового типа общего назначения по умолчанию и переопределяйте его более длинными или более короткими ограничениями, только если у вас есть веская причина. Многие установки MySQL будут автоматически усекать любые данные, которые не подходят, что приводит к потере данных, жалобам пользователей и другим серьезным проблемам. Имена и адреса электронной почты довольно часто на удивление длинные, поэтому важно учитывать их.

2. Вам нужны отдельные продукты, которые были заказаны?

Ответ №1:

Если вам нужны только product_name те продукты, которые были заказаны, вы можете выполнить приведенный ниже sql. В нем участвуют только 2 таблицы.

 select distinct p.product_name
from order_item o
join product p
on o.product_id = p.id
 

Скрипка Postgres DB

Комментарии:

1. спасибо)) можете ли вы мне помочь, пожалуйста, теперь мне нужно отобразить продукты, которые не были заказаны

2. Используйте except предложение между этой таблицей и product таблицей.