SQLite JOIN两个带有重复键的表

时间:2012-04-21 16:42:19

标签: 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      nok     04/03
3    100        jhon      nok     04/06 
4    100        jhon      ok      04/06

两个“关键”字段都是自动增量。问题是我的关系字段在结果中重复了几次,我需要生成一对一的关系,使得表2中的一行必须仅与表1上的一行相关联。

我做了一个左连接(customer = customer和productid = productid),但是关系出现重复,平板电脑2的一行多次与第一列的行相关。

澄清事情......
我必须交叉检查两个表,表1是从XLS报告加载的,表2是来自数据库的数据,它反映了具有许多状态数据的客户事务。我必须检查数据库中是否存在来自XLS的行,然后加载其他状态数据。当XLS中的行没有关于数据库的对应数据时,我必须生成一个报告。

如何实现这个JOIN,这只能用SQL吗?

2 个答案:

答案 0 :(得分:0)

理解这一点的一种方法是弄清楚每个表的确切代表。这两个表似乎代表相同的东西,一行代表你可能称之为购买的东西。为什么有两个单独的表呢?也许第二张表对每次购买都有更深入的了解?就像jhon买的产品100一样,首先是'nok'然后'ok'?是这样,那么第二个表的关键(使表唯一的原因)就是所有三个字段。 您仍然只加入匹配的两个字段,但如果有两行具有相同的唯一键,则不能指望唯一性。 有时可以帮助在表上创建其他索引,以查看真正独特的内容。

答案 1 :(得分:0)

您可以使用下面的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