在Python中实现合并连接

时间:2016-02-06 22:12:11

标签: python sql database join

我熟悉SQL中的JOIN操作,但我不太了解它们在内部的工作方式。

我被赋予了在Python中实现merge_join函数的任务。我已经正确实现了嵌套循环连接:

def nested_loop_join(self, outer, outer_join_index, inner, inner_join_index):
    inner_list = list(inner)
    for outer_row in outer:
        for inner_row in inner_list:
            if outer_row[outer_join_index] == inner_row[inner_join_index]:
                yield outer_row + inner_row

我的合并加入是:

def merge_join(self, outer, outer_join_index, inner, inner_join_index):
    inner_list = list(inner)
    for outer_row in outer:
        for inner_row in inner_list:
            if outer_row[outer_join_index]==inner_row[inner_join_index]:
                yield outer_row+inner_row
            else:
                yield outer_row

但它似乎并没有起作用。 从我的理解不应该合并连接就像将内表附加到外部?我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

据推测,您指的是名为merge join的算法,而不是名为merge的SQL命令(后者同时执行插入和更新)。

合并连接算法采用两个已排序的记录列表。当键相同时,它会生成具有两个记录的值的笛卡尔积。如果任一输入的键值不在另一个中,则该键不在输出中。

我不会编写执行此操作的Python代码。但是,如果您了解算法的作用,那么转换为Python应该非常简单。