从ID所在的位置(我的程序的数组)进行选择
本文关键字:数组 选择 行选 程序 ID 位置 我的 | 更新日期: 2023-09-27 17:57:56
我想从我的表中获得一个基于ID的项目列表。我需要选择的ID列表包含在我的程序中的数组或字典中。
因此,与其使用大量查询:
从tblData中选择*,其中ID=1
从tblData中选择*,其中ID=3
从tblData中选择*,其中ID=9
从tblData中选择*,其中ID=15
(此处为千条记录)从tblData中选择*,其中ID=50000
从tblData中选择*,其中ID=50100
由于需要运行太多查询,因此性能非常差。还有其他更聪明的方法吗?
在Where
条件下使用In
。
Dim sIDs As String
For Each sID As String In dic.Keys
sIDs += sID + ","
Next
'Remove last comma
sIDs = sIDs.Substring(0,sIDs.Length-1)
Dim sql As String = "Select * from tblData where ID In (" + sIDs + ")"
现在您可以执行这个sql并使用sql适配器填充数据表
如果值存储在Array中,则可以使用String。使用in语句联接并将其放置在sql查询中。
Dim sIDs As String = String.Join(",", arrID)
Dim sql As String = "Select * from tblData where ID In (" + sIDs + ")"
不要使用Select *
,而是使用显式列Select Column1, Column2
。。。
根据您的表/db结构和数据,尝试不同的解决方案可能会获得一定的速度:
-
使用
WHERE ID BETWEEN min_sId AND max_sId
选择所有记录(因此在ID上有一个限制过滤器),然后排除不需要的记录。(我可能会使用这个解决方案) -
使用一个临时表,首先插入您的ID,然后在临时表上使用
INNER JOIN
从tblData中进行选择(我认为这不会更快,因为您需要在加入前将所有ID插入表中)
我也会考虑改变我的界面逻辑,如果我的用户可以选择50.000个元素,听起来就不太对劲了。