SQL link 两列都不唯一的表之间的列
SQL link columns between tables where neither column is UNIQUE
我已经开始学习 SQL 以便能够收集有关生产流程的数据,因为我们当前的方法(excel 电子表格)已经过时了。
我正在使用 SQlite3 创建数据库,但我 运行 遇到了一个问题,我试图在单独的 table 的列之间创建关系,但该关系存储唯一值。
例如:
CREATE TABLE process1 (
Product1ID INTEGER PRIMARY KEY,
StartDate TEXT,
EndDate TEXT
);
CREATE TABLE process2 (
Product2ID INTEGER PRIMARY KEY,
StartDate TEXT,
EndDate TEXT
);
一旦产品完成流程 1,它就会进入流程 2,因此我想将流程 2(StartDate) 中的任何值限制为流程 1(EndDate) 中已经找到的日期。
但是多个产品可以在同一日期开始和结束 process1(和 process2),因此 table 中任一日期列的 none 包含 UNIQUE 值,据我所知这是要求外键约束的父键。
有没有办法限制 table 的一列,以便所有值都必须已经存在于另一个 table 的列中,并且任何一列都没有唯一值?
CREATE TABLE products(
ProductID INTEGER PRIMARY KEY,
ProductName TEXT
);
CREATE TABLE process1 (
process1ID INTEGER PRIMARY KEY,
ProductID integer,
StartDate TEXT,
EndDate TEXT,
CONSTRAINT process1_productid_fkey FOREIGN KEY (productid)
REFERENCES products (productid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE process2 (
process2ID INTEGER PRIMARY KEY,
ProductID integer,
StartDate TEXT,
EndDate TEXT,
CONSTRAINT process1_productid_fkey FOREIGN KEY (productid)
REFERENCES products (productid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
然后你可以select像这样连接。
Select * from products p
LEFT JOIN process1 p1 on p1.ProductID = p.ProductID
LEFT JOIN process2 p2 on p2.ProductID = p.ProductID
我已经开始学习 SQL 以便能够收集有关生产流程的数据,因为我们当前的方法(excel 电子表格)已经过时了。
我正在使用 SQlite3 创建数据库,但我 运行 遇到了一个问题,我试图在单独的 table 的列之间创建关系,但该关系存储唯一值。
例如:
CREATE TABLE process1 (
Product1ID INTEGER PRIMARY KEY,
StartDate TEXT,
EndDate TEXT
);
CREATE TABLE process2 (
Product2ID INTEGER PRIMARY KEY,
StartDate TEXT,
EndDate TEXT
);
一旦产品完成流程 1,它就会进入流程 2,因此我想将流程 2(StartDate) 中的任何值限制为流程 1(EndDate) 中已经找到的日期。
但是多个产品可以在同一日期开始和结束 process1(和 process2),因此 table 中任一日期列的 none 包含 UNIQUE 值,据我所知这是要求外键约束的父键。
有没有办法限制 table 的一列,以便所有值都必须已经存在于另一个 table 的列中,并且任何一列都没有唯一值?
CREATE TABLE products(
ProductID INTEGER PRIMARY KEY,
ProductName TEXT
);
CREATE TABLE process1 (
process1ID INTEGER PRIMARY KEY,
ProductID integer,
StartDate TEXT,
EndDate TEXT,
CONSTRAINT process1_productid_fkey FOREIGN KEY (productid)
REFERENCES products (productid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE process2 (
process2ID INTEGER PRIMARY KEY,
ProductID integer,
StartDate TEXT,
EndDate TEXT,
CONSTRAINT process1_productid_fkey FOREIGN KEY (productid)
REFERENCES products (productid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
然后你可以select像这样连接。
Select * from products p
LEFT JOIN process1 p1 on p1.ProductID = p.ProductID
LEFT JOIN process2 p2 on p2.ProductID = p.ProductID