python - SQLite 比较查询 Python

标签 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)]

'''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)]

所以我想做的是获取 results_a 并确保它们在 results_b 中的某个位置完全匹配。因此,由于第二个元组中的第二条记录与 results_a 中的第二条记录不同,我想返回 results_a 中的第二个元组。

最终我想返回一个集合,其中还包含与另一个集合不匹配的第二个元组,以便我可以在程序中引用这两个元组。理想情况下,由于第二个元组主键(table1中的field_b)与table2中相应的主键(field_a)不匹配,那么我想显示 results_c ={(121212121, 222222222, 999999999):(121212121, 222222222, 999999999)} 。由于两个表中的结果的顺序不同,因此问题变得复杂,因此我无法编写这样的代码(将 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)} 因为这些是唯一不同的集合。有什么想法吗?

最佳答案

获取 results_a 并确保它们与 results_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]

--编辑/另一个可能的partial_match

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

关于python - SQLite 比较查询 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704677/

相关文章:

java - 我的代码不会从 Android 中的 sqlite 数据库表中删除最后 2 行

android - 在 SQLite 中存储浮点值会更改 Room DB 中的小数精度

sql - 在dplyr中用转换后的数据替换SQL数据库表

python - pystache : render context inside lambda

python - 调用函数与内联代码时的不同行为

python - 如何根据其在 Selenium 中以什么结尾的元素来查找元素?

SQL整数除法余数

c++ - python tcp 服务器和 c++ 客户端之间的对话

sql - 如何在没有日志文件的情况下附加 MDF?

sql - 推荐应用程序来测试 vb.net 应用程序的 SQL Server 2008 查询?