我有兩個數據庫具有相同的模式,我合併,現在我想返回可能匹配的記錄。加入兩個表並返回N個共同的行
也就是說,返回三個記錄在更新的數據庫可能看起來像:
id foo bar baz meow mix
36 123 234 567
962 123 345 456 567
962 345
我希望能夠搜索具有任何共同的n個列值的記錄(其中n = 2明顯) 。在這個例子中,記錄1和2具有相同的'foo'和'mix'值,記錄2和3具有相同的'id'和'bad'值。
我知道它應該是一個INNER JOIN,但我的問題是我希望它能夠返回任何具有任何n列值的記錄,所以我不知道要將它們連接在一起。
SELECT * FROM table t1 INNER JOIN table t2 ON ...
任何幫助將不勝感激!
附錄:
@Gordon Linoff
好吧,這工作!我將它概括爲任意表格和任意列數,並排除與之相同的匹配項:
"SELECT t1.*, t2.* FROM {0} t1 JOIN {0} t2 ON {1} WHERE ({2}) BETWEEN 2 AND {3}".format(table, ' or '.join(['t1.{0}=t2.{0}'.format(c) for c in columns]), '+'.join(['(CASE WHEN t1.{0}=t2.{0} THEN 1 ELSE 0 END)'.format(c) for c in columns]),len(columns)-1)
謝謝!
更新:我正在改革這個表上有〜10K記錄,這太慢了!有沒有更快的方法來做到這一點?
這可能是一個好主意,建立功能採取5個參數和返回對數。然後通過將函數放入WHERE子句中,再次運行該函數的每一行。 – huhu78
@ huhu78這是什麼樣子? –
僞代碼函數:int f(arg1,arg2,arg3,arg4,arg5){比較所有內容,計數對,返回對};然後在查詢中:SELECT id FROM tab1 WHERE f(col1,col2,col3,col4,col5)> = n;函數的使用可能更具可讀性,更可重用,只需幾步就可以編寫函數的機會 – huhu78