表之间的SQL链接列,其中列都不是UNIQUE

时间:2017-02-06 17:24:33

标签: sql sqlite foreign-keys foreign-key-relationship

我已经开始学习SQL以便能够在生产流程中收集数据,因为我们当前的方法(excel电子表格)正在超越它的实用性。

我正在使用SQlite3创建数据库,但我遇到了一个问题,我正在尝试在单独的表的列之间创建关系,但关系中的列都不存储唯一值。

例如:

CREATE TABLE process1 (
    Product1ID INTEGER PRIMARY KEY,
    StartDate TEXT,
    EndDate TEXT
);

CREATE TABLE process2 (
    Product2ID INTEGER PRIMARY KEY,
    StartDate TEXT,
    EndDate TEXT
);

一旦产品完成了process1,它就进入process2,所以我想将process2(StartDate)中的任何值约束为process1(EndDate)中已经找到的日期。

但是多个产品可以在同一天开始和结束process1(和process2),因此任何一个表中的Date列都不包含UNIQUE值,我理解这是外键约束的父键的要求。

有没有办法约束表的一列,以便所有值必须已经存在于另一个表的列中而没有任何列保存唯一值?

1 个答案:

答案 0 :(得分:2)

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 * from products p 
 LEFT JOIN process1 p1 on p1.ProductID = p.ProductID
 LEFT JOIN process2 p2 on p2.ProductID = p.ProductID