【问题标题】:algorithm for traversing multiple tables for a query一个查询遍历多个表的算法
【发布时间】:2015-02-21 20:04:10
【问题描述】:

我正在尝试编写一种算法,该算法将帮助我找到通过多个表来获取查询数据的最佳路径。这些表具有相互关联的重叠变量。例如,我可能有这样的查询:

'选择 T1:F1 使得 T3:F6 > 0'

表格是这样设置的:

表 1(T1): F1、F2

表 2 (T2): F2、F3、F4

表 3 (T3): F4、F5、F6

其中为 F1 到 F6 的条目分配了值。因此,表 1 有 F1,而 F2 是它的兄弟。 F2也在表2中,F4也是它的兄弟。 F4也在表3中,F6是它的兄弟。

遍历表的正确方法是: T1:F1 -> T1:F2 -> T2:F2 -> T2:F4 -> T3:F4 -> T3:F6

有这样的算法吗?似乎很难简单地搜索每个表的兄弟。似乎这将是某种树搜索算法,但我不知道如何设置树。

【问题讨论】:

    标签: sql algorithm tree tree-traversal graph-traversal


    【解决方案1】:

    在处理关系数据库时,最好根据您想要什么而不是如何去做(算法)来思考。在这种情况下,你想要的是:

    select     T1.F1
    from       T1 
    inner join T2 on T1.F2 = T2.F2
    inner join T3 on T2.F4 = T3.F4
    where      T3.F6 > 0
    

    【讨论】:

    • 好的,谢谢!但是,我想做的是能够在不了解 T1.F2、T2.F2、T2.F4 和 T3.F4 的情况下从 T1.F1 转到 T3.F6。从 T1.F1 到 T3.F6 可能有不止一条路径通过表格。似乎应该有一个树遍历算法来做到这一点,但我不能完全用树来表述这个问题。
    • 恐怕我无法理解您想要什么。 “从 T1.F1 转到 T3.F6”是什么意思?为什么说树?请提供具体数据和您想要实现的示例。
    • 好吧,这些表通过它们拥有的公共字段相互关联。所以Table1和Table2有共同的F2,Table2和Table3有共同的F4。 F1 和 F2 等每个字段中的数据都可以关联。例如,F1 可以是姓名,F2 可以是年龄。 F1 和 F2 在同一张桌子上,所以它是路径的第一部分。 (T1:F1 -> T1:F2)。路径的下一部分是 (T1:F2 -> T2:F2),因为它们彼此相关。然后是 (T2:F4 -> T3:F4)。最后一部分是 (T3:F4 -> T3:F6)。我现在不确定是否要使用树。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2016-02-24
    • 2011-07-16
    • 2015-09-03
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多