我想在sqlite3中关联以下2个表。我从其他示例中了解到,每个表之间都应该有一些公共字段,因此我添加了order_ID。
1)如何编写sqlite查询以创建这些表之间的关系?
2)如何管理表2,其中同一订单可以具有多个产品,因此重复订单ID。一个订单可以包含最少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
答案 0 :(得分: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 date functions来处理这些日期。
现在,我们需要一个表格,以获取有关每个顺序中的内容的信息。
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
相匹配,并将它们都视为一个单独的行。 / p>
在这里,您可能需要将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
如果您现在不这样做,以后将很难执行。