我需要找到列表中与列表中至少一个其他对象相交的所有对象。这取决于几个设置:
FirstName
,LastName
或DOB
上相交。FirstName
和LastName
,则他们会相交,相同的FirstName
和DOB
,或相同的LastName
和DOB
)。确定此问题的最有效方法是什么?现在,使用带有GROUP BY
语句的SQL和临时表是最高效的,但还不够好。我尝试在C#/ LINQ中使用字典和硬编码各种属性检查,但情况更糟。我一直在研究不相交的集合和Levenshtein距离,但对于大型列表而言,这似乎效率低下。这只是NP完全问题吗?
答案 0 :(得分:0)
您必须使用UNPIVOT将表格更改为此格式
如果您没有user_id
,可以使用row_number()
USER_ID, FIELDNAME , VALUE
1 , "LastName" , "Smith"
1 , "FirstName", "Jhon"
1 , "DOB" , "15/09/48"
SELECT T1.user_id, T2.user_id, count(T2.FieldName)
FROM Table1 T1
LEFT JOIN Table1 T2
on T1.UserID > T2.UserID
and T1.FIELDNAME = T2.FIELDNAME
and T1.Value = T2.Value
GROUP BY T1.user_id, T2.user_id
HAVING count(T2.FieldName) >= 2
然后执行此连接
//On your api interface
@POST("path/to/your/resource")
@Streaming
void apiRequest(Callback<POJO> callback);
restAdapter.apiRequest(new Callback<POJO>() {
@Override
public void success(POJO pojo, Response response) {
try {
//you can now get your file in the InputStream
InputStream is = response.getBody().in();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void failure(RetrofitError error) {
}
});