处理两列值的两表联接

约翰

我正在研究一个比较引擎,该引擎从许多折扣站点获取折扣,然后将其货架并堆放在特定商店中。

我有一个idlinks表,用于将商店的折扣站点的ID与主商店列表相关联:

idlinks (rebate_site_id      int,
         store_id_from_site  text,
         store_id_master     text)

然后,我将所有商店的所有站点的折扣汇总到一个rebates表中:

rebates (rebate_site_id      int,
         store_id_from_site  text,
         rebate_amount       text)

由于新的商店和折扣一直在出现,因此我想挑选出尚未与主列表相关的折扣。为此,我运行一个查询:

select * from rebates
left join idlinks on (rebates.rebate_site_id = idlinks.rebate_site_id and
                      rebates.store_id_from_site = idlinks.store_id_from_site)
where (idlinks.rebate_site_id is null and idlinks.store_id_from_site is null)

此方法有效,但是每个表中约3万行仅花费5分钟,这似乎很长。我在一台不太古老的Windows 7计算机上使用Python中的sqlite3 3.7.4。我的代码:

import sqlite3

conn = sqlite3.connect('my.db')
c = conn.cursor()
c.execute('''<the SQL statement above>''')
conn.close()

我认为比较所有两个表中的两个字段总是需要花费很多时间。我认为,如果我一次只能比较一个特定的折扣站点,那会更快。基本上,每个rebate_site_id都要这样做,然后合并:

idlinks_1:  select * from idlinks where rebate_site_id = 1
rebates_1:  select * from rebates where rebate_site_id = 1

unmatched_1 = select * from rebates_1
              left join idlinks_1
                  on rebates_1.store_id_from_site = idlinks_1.store_id_from_site
              where idlinks_1.store_id_from_site is null

idlinks_1rebates_1查询速度快。unmatched_1在特定回扣站点的子表上测试了查询,它的速度要快得多。

我尝试使用子查询来执行此操作,但是并没有缩短执行时间:

select * from rebates
left join (select * from idlinks where idlinks.rebate_site_id = 1)
    on rebates.store_id_from_site = idlinks.store_id_from_site
where rebates.rebate_site_id = 1 and idlinks.store_id_from_site is null

有没有一种方法可以重写查询,使其仅在表中针对某个特定折扣站点的部分上进行联接?或者,是否可以将快速查询的结果输入另一个execute语句,而我可以循环遍历所有rebate_site_ids?

里马斯

尝试创建索引:

CREATE INDEX idlinks_i1 ON idlinks(rebate_site_id,store_id_from_site);
CREATE INDEX rebates_i1 ON rebates(rebate_site_id,store_id_from_site);

这将加快您的第一个查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理两列值的两表联接

来自分类Dev

使用左外部联接联接两个表,并根据右表列填充新的列值

来自分类Dev

根据两列联接两个表

来自分类Dev

在两个联接表中选择与最大值对应的列

来自分类Dev

如何联接列中具有相同值的两个表

来自分类Dev

处理两个列表,逐行迭代和联接值

来自分类Dev

从表中选择列与联接两个表

来自分类Dev

MySQL用逗号分隔值联接两个表

来自分类Dev

联接两个表时如何避免重复值?

来自分类Dev

如何使用联接查询返回两个表值

来自分类Dev

在两列上联接表

来自分类Dev

在两列上联接表

来自分类Dev

如何联接两个表,多次使用特定的列

来自分类Dev

根据不同的列联接两个表

来自分类Dev

SQL针对多个列联接两个表

来自分类Dev

用混合列联接两个表

来自分类Dev

如何根据两列的值与另一个表的内部联接分别计算记录的比率?

来自分类Dev

Excel表查找匹配两列的值

来自分类Dev

根据表值合并两列

来自分类Dev

Rails:跨两列联接

来自分类Dev

如何联接两个表,然后选择两个不同的列?

来自分类Dev

通过两个不同的列联接两个表,输入和顺序

来自分类Dev

使用LINQ通过两个关键列联接两个数据表

来自分类Dev

当联接列具有不同的名称时,如何联接两个表?

来自分类Dev

从联接两个表中获得唯一值,其中一个表可能具有特定列的重复值

来自分类Dev

如何联接2个表并使用两个表中的公共列选择特定列

来自分类Dev

将两个表联接起来,并根据两个表计算一个值

来自分类Dev

在“ php”中自联接两个表后,如何打印在表中获得的值?

来自分类Dev

联接表,两个表之间匹配时不显示值

Related 相关文章

热门标签

归档