【问题标题】:SQLite JOIN two tables with duplicated keysSQLite JOIN 两个具有重复键的表
【发布时间】:2012-04-21 16:42:19
【问题描述】:

我需要连接两个不同字段的两个表。我有这样的表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 的行相关联很多次。

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

这个JOIN怎么实现,只用SQL可以吗?

【问题讨论】:

  • 假设您想从 table2 中取出两行(key=3 和 key=4)中的一个,用于 key=1 的 table1 记录:您选择哪一个?为什么?
  • 两种都可以,条件是(productid=productid and customer=customer),但是是一对一的。例如,在我的示例中,table2-key3 可能与 tablet1-key1 和 key3 相关,但我的要求是只关联一次,因此 key1 或 key4 可以是一次,但只能关联一次。
  • @Marco 的问题很重要。而且,由于 table1 与 table 2 具有相同的信息(这可能是糟糕的架构设计),你为什么要关心 table1 呢?
  • 我必须从表 1 到表 2 交叉检查信息,并从表 2 加载其他数据。
  • 你能提供一个你正在寻找的结果的例子吗?

标签: sql sqlite join one-to-one


【解决方案1】:

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

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

    【讨论】:

    • 我必须交叉检查两个表,表 1 是从 XLS 报告中加载的,表 2 是来自数据库的数据,它反映了具有许多状态数据的客户交易。我必须检查数据库中是否存在来自 XLS 的行,然后加载其他状态数据。当 XLS 中的行在数据库中没有对应的数据时,我必须生成报告。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2020-09-23
    • 2022-01-27
    • 2019-01-28
    相关资源
    最近更新 更多