代码之家  ›  专栏  ›  技术社区  ›  markus

连接或写入递归函数-动态连接查询数问题

  •  1
  • markus  · 技术社区  · 15 年前

    我有以下问题要解决:

    假设有一个表A包含许多元素,这个表被复制成表B。在表B中,一些原始元素丢失,一些被添加。参考表AB跟踪这些变化。然后将表B复制到表C中,一些现有的元素会丢失,一些元素会被添加。另一个参考表BC跟踪这些关系。…等。

    有n个这样的表,其中有n-1个引用表。

    如果我想知道我在表C中选择的哪些元素已经存在于a中,我可以通过这样做:

    SELECT AB.oldID
    FROM AB
    JOIN BC
    WHERE BC.newID IN (x, y, z)
    

    现在,由于引用表的数量可能会有所谨慎,所以联接行的数量可能会有所谨慎。

    我应该通过循环执行这些步骤并添加连接线来连接查询吗?还是应该编写一个递归函数,只选择下一步的成员,然后让函数自己调用,直到得到最终结果?

    或者有其他更好的方法来做类似的事情吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Quassnoi    15 年前

    由于表名不同,因此需要构建某种动态查询。

    如果您使用递归函数方法,您将需要以某种方式在函数调用之间传递结果集。

    MySQL 没有数组数据类型,在临时表中存储结果太长。

    结论:使用连接。

    更新:

    下面是一个示例查询,它返回通过修订保持的条目 A 修订 M (单桌设计)

    SELECT  *
    FROM    entries e
    WHERE   NOT EXISTS
            (
            SELECT  *
            FROM    revisions r
            JOIN    revision_changes rc
            ON      rc.revision_id = r.id
            WHERE   rc.entry_id = e.id
                    AND rc.deleted
                    AND r.revision_id BETWEEN 'A' AND 'M'
            )
    

    这样,你只要把 added deleted 领域 revision_changes 用于添加或删除条目的修订。