SQL-запрос, чтобы связать 2 таблицы - PullRequest
0 голосов
/ 13 октября 2018

Я хочу связать следующие 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 Ответ

0 голосов
/ 13 октября 2018

Похоже, вы хотите хранить заказы и информацию об этих заказах.Сначала создайте таблицу заказов.

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.Вы можете связать эти таблицы вместе, используя join .Вот как вы получите покупателя для каждого продукта.

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

SQL Fiddle

Если вы не сделаете это сейчас, это будет сложнее сделать позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...