我在一个SQLite3数据库连接中有2个数据库,其中有3个表。我在这些表/数据库上创建一个临时表,以支持更好,更快的搜索/过滤。
这是一个例子。真正的桌子要大得多。
第一桌:
ROWID(唯一)|姓名|姓氏
第二桌:
id(来自第1张表)| phonenumber
第3表:
id(来自第1张表)| emailaddress
我有2个这样的数据库(将来会更多)。要创建临时表,请执行以下操作:(附加了一个数据库连接和一个单独的数据库“pb”。)
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);
这会生成如下平面表:
名字|姓氏| PHONENUMBER | EMAILADDRESS
但是(这最终是个问题)如果联系人有(例如:) 3个电话号码和3个电子邮件地址,我会在结果表中获得3 * 3个条目。结果表包含所有电话号码的组合 - 电子邮件地址组合
有没有办法创建一个只有3个条目的平面表?
现状:
名字 - 姓氏 - email1 - phone1
firstname - lastname - email1 - phone2
名字 - 姓氏 - email1 - phone3
firstname - lastname - email2 - phone1
名字 - 姓氏 - email2 - phone2
firstname - lastname - email2 - phone3
firstname - lastname - email3 - phone1
名字 - 姓氏 - email3 - phone2
名字 - 姓氏 - 电子邮件3 - 电话3
最佳解决方案(可能以不同的顺序):
名字 - 姓氏 - email1 - phone1
名字 - 姓氏 - email2 - phone2
名字 - 姓氏 - 电子邮件3 - 电话3
答案 0 :(得分:0)
好的,花了一些时间,但我摆脱了临时表。我编写了一个" QueryBuilder"它为给定的结果/过滤器/排序/ ...生成查询
它很安静,但是 - 嗯 - 你必须这样做才能提高性能。 :-)
谢谢!