Я пытался найти лучший способ написать запрос для сравнения строк в двух таблицах.Моя цель - увидеть, находятся ли два кортежа в наборе результатов 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.
В конечном итоге я хотел бы вернуть набор, который также имеет второй кортеж, который сделалне совпадают в другом наборе, чтобы я мог ссылаться на оба в моей программе.В идеале, поскольку второй первичный ключ кортежей (field_b в таблице 1) не соответствует соответствующему первичному ключу (field_a) в таблице 2, я хотел бы отобразить results_c = {(121212121, 222222222, 999999999) :( 121212121, 222222222, 999999999)},Это усложняется тем фактом, что результаты в обеих таблицах не будут в одинаковом порядке, поэтому я не могу написать код, который говорит (сравните tuple2 в results_a с tuple2 в results_b).Это больше похоже на сравнение (сравните tuple2 в results_a и посмотрите, соответствует ли оно какой-либо записи в 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)}, потому что это единственные наборы, которые отличаются.Есть идеи?