2016-09-27 47 views
0

我正在处理一个广义问题,我只给出了多个表的模式定义。SQL JOIN OPTIMIZATION

现在我必须通过连接多个表来检索某些列,以便最大限度地减少连接数。

示例:假设我有3个表,这里是他们有的列的列表。

表1:(1,2,3,4,5), 表2:(5,6,7), 表3:(5,6,7,8)

现在假设我有一个查询,我想要所有的列1,2,3,4,5,6,7,8。

现在我可以加入任何表1,表2和表3 OR 表1和表3。我会得到在这两种情况下所需要的信息,但加入表1和表3中仅需要1在其他情况下加入而不是2加入。

我想要的是一种贪婪算法,首先我会考虑具有最大数量所需列的表,然后消除查询和表之间的共同列(来自查询和表),然后考虑更新所需的列和更新表格等等,但我想这会很慢。

那么有没有一个广义的算法,或者如果任何人都可以在这个方向给我任何提示?

+0

因为它发布的任务,使得在SQL域中没有SENCE。同一组列名不能确保相同的内容。 – Serg

回答

0

首先,我不得不提到它不是“加入”,而是“联合”。 然后我不得不提到,如果你想使用贪婪算法,你必须先加入2个最短的,因为当你加入一个表2次,它将是o(n),所以你将有2n要做的事情,所以如果n越小越好。 除了这些,下面的链接可能对您有用: Merging 3 tables/queries using MS Access Union Query

+0

它只是一个连接,因为我可能使用了2个连接(我可以连接第5列的表1和表2,然后是第6列的表2和表3)或单个连接(第5列的表1和表3) )获得所有列1,2,3,4,5,6,7,8 –