SQLite使用重复的键连接两个表

SQLite使用重复的键连接两个表,sql,sqlite,join,one-to-one,Sql,Sqlite,Join,One To One,我需要连接两个不同字段上的两个表。我有如下表1: key productid customer 1 100 jhon 2 109 paul 3 100 john 表2有相同的字段,但传统数据必须和第一个表相关 key productid customer status date ... 1 109 phil ok 04/01 2 109 paul no

我需要连接两个不同字段上的两个表。我有如下表1:

key  productid  customer
1    100        jhon
2    109        paul
3    100        john
表2有相同的字段,但传统数据必须和第一个表相关

key  productid  customer  status  date ...
1    109        phil      ok      04/01 
2    109        paul      nok     04/03
3    100        jhon      nok     04/06 
4    100        jhon      ok      04/06
两个“键”字段都是自动递增的。问题是我的关系字段在结果中重复了好几次,我需要生成一对一的关系,这样表2中的一行只能与表1中的一行关联一次

我在(customer=customer和productid=productid)上做了一个左连接,但关系出现了重复,tablet 2中的一行多次与表1中的行相关

澄清事情…

我必须交叉检查这两个表,表1是从XLS报告中加载的,表2是从数据库中加载的数据,该数据库反映了具有许多状态数据的客户交易。我必须检查数据库中是否存在XLS中的一行,然后加载其他状态数据。当XLS中的行在数据库中并没有对应的数据时,我必须生成一个报告


如何实现这种连接,只有SQL才能实现吗?

理解这一点的一种方法是找出每个表确切代表的内容。这两个表似乎表示同一件事,其中一行表示您可以称之为购买的内容。那为什么有两张分开的桌子呢?也许第二张表更深入地介绍了每一次购买?就像jhon买了产品100,先是“nok”,然后是“ok”?如果是这样,那么第二个表的键(使表唯一的原因)将是所有三个字段。 您仍然只在匹配的两个字段上进行连接,但如果有两行具有相同的唯一键,则不能期望唯一性。
有时,在表上创建附加索引会有所帮助,以查看真正的唯一性。

您可以使用下面的SQL在MS SQL中实现这一点。不确定SQLite是否支持这一点

select a.*, c.*
from table2 a, ( select min(key) key, productid, customer
                 from table1
                 group by productid, customer 
                   ) b,
               table1 c
where a.productid = b.productid
and   a.customer = b.customer
and   b.key = c.key

假设您想从表2中为键为1的表1记录获取两行(键为3和键为4)中的一行:您选择哪一行?为什么?任何一个都可以,条件是(productid=productid和customer=customer),但是是一对一的。例如,在我的示例中,table2-key3可以与tablet1-key1和key3关联,但我的要求是只关联一次,因此可以是key1或key4,但只能关联一次。@Marco的问题很重要。但是,由于表1与表2具有相同的信息(这可能是糟糕的模式设计),您为什么要关心表1?我必须交叉检查表1到表2的信息,并从表2中加载额外的数据。您能提供一个您正在寻找的结果的示例吗?我必须交叉检查两个表,表1是从XLS报告加载的,表2是来自数据库的数据,该数据库反映了具有许多状态数据的客户事务。我必须检查数据库中是否存在XLS中的一行,然后加载其他状态数据。当XLS中的行在数据库中并没有对应的数据时,我必须生成一个报告。