2012-04-21 110 views
-1

我需要在两个不同的字段上连接两个表。我有表1所示:SQLite加入两个重复键的表

key productid customer 
1 100  jhon 
2 109  paul 
3 100  john 

和表2中具有相同的字段,但aditional的数据我必须与第一台

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的多行相关。

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

如何才能完成这个JOIN,这是可能的只有SQL?

+1

假设你想利用两行(键= 3,关键= 4)中的一个从表2与主要= 1 table1的记录:其中你会选择?为什么? – Marco 2012-04-21 16:46:35

+0

任何一个都可以,条件是(productid = productid和customer = customer),但是是一对一的。例如,在我的示例中,table2-key3可能与tablet1-key1和key3相关,但我的要求是只涉及一次,因此可以是key1或key4,但只能使用一次。 – ruhalde 2012-04-21 16:56:26

+0

@ Marco的问题很重要。而且,由于table1与表2具有相同的信息(这可能是错误的模式设计),您为什么关心table1呢? – 2012-04-21 16:56:30

回答

0

理解这一点的一种方法是找出每个表格究竟代表什么。两张表似乎都代表了同一件事,用一行代表你可能称之为购买的东西。为什么有两个单独的表格呢?也许第二张表更深入地谈到每笔购买?就像jhon买了产品100一样,首先是'nok',然后'ok'?是的,那么第二个表格的关键(使表格唯一)就是所有三个字段。 您仍然只加入匹配的两个字段,但如果有两行具有相同的唯一键,则不能指望唯一性。 它有时有助于在表格上创建附加索引,以查看真正独特的内容。

+0

我必须交叉检查两个表,表1是从XLS报告中加载的,表2是来自数据库的数据,该数据库反映的客户交易中包含许多状态数据。我必须检查数据库中是否存在来自XLS的行,然后加载其他状态数据。当来自XLS的行在数据库中没有对应数据时,我必须生成报告。 – ruhalde 2012-04-21 17:01:51

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