3 回答
TA贡献1806条经验 获得超5个赞
这可以在一个 SQL 命令中完成...
UPDATE MAPPOINT
SET [MultipleSite] = 1
FROM MAPPOINT m
INNER JOIN (
SELECT X, Y FROM MAPPOINT
GROUP BY X, Y
HAVING COUNT(*) > 1
) gr on gr.X = m.X
and gr.Y = m.Y
如果您只想选择这些记录在内存中进行操作...
SELECT m.*
FROM MAPPOINT m
INNER JOIN (
SELECT X, Y FROM MAPPOINT
GROUP BY X, Y
HAVING COUNT(*) > 1
) gr on gr.X = m.X
and gr.Y = m.Y
TA贡献1815条经验 获得超13个赞
有几种潜在的解决方案,具体取决于您想要实现的目标以及您希望如何解决。
在按照data您的问题填写列表后,您可以在 C# 中使用类似以下内容,然后使用结果更新数据库(如果这是您想要做的):
foreach(wayPoint in data)
{
if(data.Any(d => (d.MPID != wayPoint.MPID)
&& (d.X == wayPoint.X)
&& (d.Y == wayPoint.Y)))
{
wayPoint.MultipleSite = 1;
}
}
如果您不需要更新数据库,那应该没问题;否则,您可以使用上述结果来更新您的数据库,或者您可以在数据库中创建一个存储过程来执行类似的操作。
一个想法:
创建一个包含值MPID、X和的临时表Y,并用主表中的所有内容的副本填充它。
迭代生成的临时表并使用与上述if-structure相同的标准检查主表(选择并获取MPID所有具有匹配X和Y-values 的行的-values)。
对于临时表中的每一行,更新主表中的相关行,然后从临时表中删除更新的行(注意:删除临时表中与主表中更新行相对应的所有行意味着您将不得不在临时表中查询至少少一行;毕竟您不需要检查您是否已经知道它的MultipleSite值为1)。
这可能听起来很重/很慢,也许有更有效的方法来做你想做的事,但它至少应该是可行和可以理解的。
无论哪种方式,我都看不到如何遍历所有行,因为这本质上正是您想要做的;检查每一行是否还有其他具有相同值的行。
- 3 回答
- 0 关注
- 250 浏览
添加回答
举报