在SQLite3中创建临时表时减少条目数

在SQLite3中创建临时表时减少条目数,sqlite,left-join,union,temp-tables,create-table,Sqlite,Left Join,Union,Temp Tables,Create Table,在一个SQLite3数据库连接中有两个数据库和三个表。我在这些表/数据库上创建了一个临时表,以支持更好更快的搜索/筛选。 这里有一个例子。真正的桌子要大得多。 第一表: rowidunique | firstname | lastname 第二表: 第一表中的IDF |电话号码 第三表: idfrom第一表|电子邮件地址 我有两个甚至更多的在未来的数据库这类。要创建临时表,我需要执行以下操作:有一个数据库连接和一个单独的数据库连接 这将生成如下所示的平面表格: 名字|姓氏|电话号码|电子邮件地址

在一个SQLite3数据库连接中有两个数据库和三个表。我在这些表/数据库上创建了一个临时表,以支持更好更快的搜索/筛选。 这里有一个例子。真正的桌子要大得多。 第一表: rowidunique | firstname | lastname 第二表: 第一表中的IDF |电话号码 第三表: idfrom第一表|电子邮件地址 我有两个甚至更多的在未来的数据库这类。要创建临时表,我需要执行以下操作:有一个数据库连接和一个单独的数据库连接

这将生成如下所示的平面表格: 名字|姓氏|电话号码|电子邮件地址 但最后一个问题是,如果一个联系人有3个电话号码和3个电子邮件地址,我会在结果表中得到3*3个条目。结果表包含所有电话号码-电子邮件地址组合。 有没有办法创建一个只有3个条目的平面表格? 当前情况: firstname-lastname-email1-phone1 firstname-lastname-email1-phone2 firstname-lastname-email1-phone3 firstname-lastname-email2-phone1 firstname-lastname-email2-phone2 名字-姓氏-电子邮件2-电话3 firstname-lastname-email3-phone1 名字-姓氏-电子邮件3-电话2 firstname-lastname-email3-phone3 最佳解决方案的顺序可能不同: firstname-lastname-email1-phone1 firstname-lastname-email2-phone2 firstname-lastname-email3-phone3

好的,花了一些时间,但我把临时桌子处理掉了。我编写了一个QueryBuilder,它为给定的结果/过滤器/排序/生成查询。。。 这很复杂,但是-好吧-为了性能,你必须这样做-
谢谢

这将相当复杂。你为什么不问问如何改进原始的搜索算法呢?是的,我考虑过了,但我遇到的主要问题是,客户端软件要求在至少2个数据库(每个数据库有3个表)上使用不同的过滤和排序算法列出联系人。我必须首先生成一个ID列表,该列表与筛选和排序条件相匹配,以避免占用我们所有的内存。然后,客户端软件只请求windows提供详细的联系信息。如果我使用一个临时表,我在表中有一个唯一的ID,否则我所有的ID都有两次。创建一个扁平表是解决实际问题的一个糟糕方法。好吧,也许我把问题转移到别的地方了。但是我如何在两个不同的表中搜索两个数据库?类似的操作不起作用:从SELECT name\u table.rowid中选择*,从name\u table.origin中选择email\u table.email\u emailaddress从name\u table中选择,从email\u table左侧加入name\u table上的email\u table.id,其中name\u familyname像'Zimmermann'和email\u emailaddress像'%Zim%'
CREATE TEMPORARY TABLE temp_table AS 
   SELECT * FROM pb.name_table 
      LEFT JOIN pb.phone_table ON (pb.name_table.id=pb.phone_table.id) 
      LEFT JOIN pb.email_table ON (pb.name_table.id=pb.email_table.id) 
   UNION SELECT * FROM name_table 
      LEFT JOIN phone_table ON (name_table.id=phone_table.id) 
      LEFT JOIN email_table ON (name_table.id=email_table.id);