我目前有一个SQL查询,目前多次调用这个(伪代码):
foreach(KeyValuePair kvp in someMapList)
{
select col1 from table where col2 = kvp.key and col3 = kvp.value;
//do some processing on the returned value
}
如果它是一个很大的对列表,上面显然可以多次调用数据库。
任何人都可以想到一个更高效的SQL片段,它基本上可以根据两个独特信息列表返回特定值列表,以便处理可以批量完成吗?一个显而易见的问题是用OR构建一大块SQL,但这可能效率很低?
由于
卡尔
答案 0 :(得分:0)
将KeyValuePair插入表中并使用JOIN man 或(如果是c#)
from record in table
join key in someMap on record.col2 equals key.key && record.col3 equals key.keyvalue
select col1 //or some anonymous type or a DTO I do not know...
那就更有效了:D
答案 1 :(得分:0)
假设您坚持使用实体 - 值对模式,最好的办法是创建一个存储过程并传入一对分隔的字符串,然后您可以将其转换为临时表并选择使用加入,或者如果你可以传入一个更好的表参数。
另一种可能性是插入工作表中,为您的值添加某种唯一的连接ID,然后加入其中。
在任何情况下,您的目标都是能够通过以某种方式将配对进入数据库,使用基于集合的方法选择数据。