SQLite比较查询Python

SQLite比较查询Python,python,sql,sqlite,Python,Sql,Sqlite,我一直在试图找出编写查询以比较两个表中的行的最佳方法。我的目标是查看结果集A中的两个元组是否在较大的结果集B中。我只想查看查询结果中不同的元组 '''SELECT table1.field_b, table1.field_c, table1.field_d '''FROM table1 '''ORDER BY field_b results_a = [(101010101, 111111111, 999999999), (121212121, 222222222, 999999999)] '

我一直在试图找出编写查询以比较两个表中的行的最佳方法。我的目标是查看结果集A中的两个元组是否在较大的结果集B中。我只想查看查询结果中不同的元组

'''SELECT table1.field_b, table1.field_c, table1.field_d
'''FROM table1
'''ORDER BY field_b

results_a = [(101010101, 111111111, 999999999), (121212121, 222222222, 999999999)]

'''SELECT table2.field_a, table2.fieldb, table3.field3
'''FROM table2
'''ORDER BY field_a

results_b =[(101010101, 111111111, 999999999), (121212121, 333333333, 999999999),    (303030303, 444444444, 999999999)]
所以我想做的是获取结果a并确保它们在结果b中的某个地方精确匹配。因此,由于第二个元组中的第二条记录与results_a中的记录不同,我想返回results_a中的第二个元组

最后,我希望返回一个集合,该集合还包含另一个集合中不匹配的第二个元组,以便我可以在程序中引用这两个元组。理想情况下,由于第二个元组主键(表1中的字段_b)与表2中相应的主键(字段_a)不匹配,因此我希望显示结果_c={(121212121、222222、999999999):(1212121、222222、99999999)}。由于两个表中的结果顺序不同,所以我无法编写这样的代码(将results_a中的tuple2与results_b中的tuple2进行比较),这一点变得复杂。这更像是(比较results_a中的tuple2,看看它是否匹配results_b中的任何记录。如果主键匹配,结果b中没有一个元组完全匹配或没有找到部分匹配,则返回不匹配的记录。)

很抱歉,这太罗嗦了。我想不出更好的解释方法了。任何帮助都将不胜感激

谢谢

部分匹配的更新工作

a = [(1, 2, 3),(4,5,7)]
b = [(1, 2, 3),(4,5,6)]
pmatch = dict([])

def partial_match(x,y):
    return sum(ea == eb for (ea,eb) in zip(x,y))>=2

for el_a in a:
    pmatch[el_a] = [el_b for el_b in b if partial_match(el_a,el_b)]
print(pmatch)

输出={(4,5,7):[(4,5,6)],(1,2,3):[(1,2,3)]}。我本以为它只是{(4,5,7):(4,5,6)},因为这是唯一不同的集合。有什么想法吗?

获取结果a,并确保它们在结果b中的某个地方精确匹配:

for el in results_a:
  if el in results_b:
     ...
获取部分匹配:

pmatch = dict([])
def partial_match(a,b):
  # for instance ...
  return sum(ea == eb for (ea,eb) in zip(a,b)) >= 2
for el_a in results_a:
  pmatch[el_a] = [el_b for el_b in results_b if partial_macth(el_a,el_b)]
返回不匹配的记录:

no_match = [el for el in results_a if el not in results_b]
--编辑/另一个可能的部分匹配

def partial_match(x,y):
  nb_matches = sum(ea == eb for (ea,eb) in zip(x,y))
  return 0.6 < float(nb_matches) / len(x) < 1
def部分匹配(x,y):
nb_matches=sum(对于zip(x,y))中的(ea,eb),ea==eb)
返回0.6<浮动(nb_匹配)/len(x)<1

获取结果a并确保它们在结果b中的某个位置精确匹配:

for el in results_a:
  if el in results_b:
     ...
获取部分匹配:

pmatch = dict([])
def partial_match(a,b):
  # for instance ...
  return sum(ea == eb for (ea,eb) in zip(a,b)) >= 2
for el_a in results_a:
  pmatch[el_a] = [el_b for el_b in results_b if partial_macth(el_a,el_b)]
返回不匹配的记录:

no_match = [el for el in results_a if el not in results_b]
--编辑/另一个可能的部分匹配

def partial_match(x,y):
  nb_matches = sum(ea == eb for (ea,eb) in zip(x,y))
  return 0.6 < float(nb_matches) / len(x) < 1
def部分匹配(x,y):
nb_matches=sum(对于zip(x,y))中的(ea,eb),ea==eb)
返回0.6<浮动(nb_匹配)/len(x)<1

谢谢。我仍然在思考语言的列表理解功能,但我认为这会起作用。我已经做了一个小时了,我仍然无法使用部分匹配函数。当我尝试使用列表调用partial_match()时,我不断得到最大递归到达错误。有什么想法吗?我不认为这个函数应该是递归的。。。你能在问题的结尾向我们展示函数定义吗?我在问题中添加了一些代码,试图完成部分匹配,但我没有得到我所期望的。我的递归错误是由于语法错误。谢谢。我仍然在思考语言的列表理解功能,但我认为这会起作用。我已经做了一个小时了,我仍然无法使用部分匹配函数。当我尝试使用列表调用partial_match()时,我不断得到最大递归到达错误。有什么想法吗?我不认为这个函数应该是递归的。。。你能在问题的结尾向我们展示函数定义吗?我在问题中添加了一些代码,试图完成部分匹配,但我没有得到我所期望的。我的递归错误是由于语法错误造成的。