Я хочу связать следующие 2 таблицы в sqlite3. То, что я понял из других примеров, состоит в том, что у нас должно быть какое-то общее поле между каждой таблицей, поэтому я добавил order_ID.
1) Как написать sqlite-запросы для создания связи между этими таблицами?
2) Как управлять таблицей 2, где тот же порядок может иметь несколько продуктов, поэтому идентификатор заказа повторяется. Заказ может иметь мин 1 и не более 10 продуктов. Таким образом, он имеет динамический диапазон 1-10.
table 1:
order_ID date buyer ship_chr
001 01/01 abc 15
002 05/01 xyz 10
table 2:
order_ID prod quantity rate
001 pen 50 2
001 paper 25 1
001 pin 50 2
002 paper 25 1
002 pen 100 2
Всего 1 ответ
Похоже, вы хотите хранить заказы и информацию об этих заказах. Сначала создайте таблицу заказов.
create table orders (
id integer primary key autoincrement,
created_at timestamp not null default current_timestamp,
buyer text not null,
ship_chr text not null
)
Обратите внимание, что вместо order_id
первичный ключ таблицы - это просто id
. Это не требуется, но это соглашение, которое мне нравится, так как он сохраняет основные и внешние ключи.
Также обратите внимание, что я использую тип timestamp
для хранения дат, это значительно упростит работу с этими датами, поскольку вы можете использовать функции даты SQLite .
Теперь нам нужна таблица для информации о том, что есть в каждом порядке.
create table order_products (
id integer primary key autoincrement,
order_id integer not null references orders(id),
product text not null,
quantity integer not null,
rate integer not null
)
Это устанавливает отношения «один ко многим» между orders
и order_products
. В одном заказе может быть много products
. Вы можете связать эти таблицы вместе, используя соединение . Вот как вы получите покупателя для каждого продукта.
select o.buyer, op.product, op.quantity
from order_products op
join orders o on o.id = op.order_id
abc|pen|50
abc|paper|25
abc|pin|50
xyz|paper|25
xyz|pen|100
join orders o on o.id = op.order_id
говорит, что для каждой строки в order_products
найдите ее в тех orders
где order.id
соответствует order.id
строки и обрабатывает их как одну строку.
Отсюда вы, вероятно, захотите сделать products
и buyer
собственными таблицами, а также хранить информацию о покупателях и продуктах. Это также гарантирует, что продукты и покупатели существуют, избегая опечаток.
create table buyers (
id integer primary key autoincrement,
name text not null,
address text not null,
phone text not null
);
create table products (
id integer primary key autoincrement,
name text not null,
stock integer not null default 0
);
create table orders (
id integer primary key autoincrement,
created_at timestamp not null default current_timestamp,
buyer_id integer references buyers(id) not null,
ship_chr text not null
);
create table order_products (
id integer primary key autoincrement,
order_id integer not null references orders(id),
product_id integer not null references products(id),
quantity integer not null,
rate integer not null
);
Затем вы можете объединить все вместе, чтобы получить информацию о продуктах и покупателях.
select b.name, p.name, op.quantity
from order_products op
join orders o on o.id = op.order_id
join buyers b on b.id = o.buyer_id
join products p on p.id = op.product_id
name|name|quantity
abc|pen|50
abc|paper|25
abc|pin|50
xyz|paper|25
xyz|pen|100
Если вы этого не сделаете, это будет сложнее сделать позже.