更好的SQL查询以删除等效行
伙计们,我是SQL新手,无法找到“正确的方法”来完成查询的最后一部分。我有一个表,其中包含项目及其等价物的列表。实际上,行数是所需行数的两倍,我正试图找到一种SQL方法来选择1/2的条目,这样就不会有重复项 具有重复项的起始表:更好的SQL查询以删除等效行,sql,ms-access,Sql,Ms Access,伙计们,我是SQL新手,无法找到“正确的方法”来完成查询的最后一部分。我有一个表,其中包含项目及其等价物的列表。实际上,行数是所需行数的两倍,我正试图找到一种SQL方法来选择1/2的条目,这样就不会有重复项 具有重复项的起始表: Item Name EquivItem ---- ------ ---------- 100 bubba 106 103 gump 109 106 shrimp 100 109 grits 103
Item Name EquivItem
---- ------ ----------
100 bubba 106
103 gump 109
106 shrimp 100
109 grits 103
由此产生的表格将是:
Item Name EquivItem
----- ----- ----------
100 bubba 106
103 gump 109
我在顺序代码中使用了两个嵌套循环来过滤重复项,但最终编写了一个查询,它可以工作,但感觉像是一个黑客
我任意使用WHERE(ItemSELECT *
FROM T
WHERE Item < EquivItem
选择*
从T
其中项目<等效项目
在我养成太多坏习惯之前,我正试图花一些时间找出正确的做事方式。有什么建议吗?谢谢。是否有可能有两个以上的项目是等效的,例如100=103=106?这会发生吗
Item Name EquivItem
---- ------ ----------
100 bubba 103
103 gump 106
106 shrimp 103
只要等价物不能链接在一起,并且总是有一对一的关系,我就觉得你的解决方案非常好
如果这种情况可能发生,我会首先清理数据,以确保所有项目都引用链中最低的项目ID。。。然后原始查询仍将执行此任务。表上的主键是什么?Item和EquivalItem中是否可以有重复项?我假设不是,只是想知道数据上是否有任何限制。所以澄清一下:每个项目都有一个且只有一个等价物?在这种情况下,我看不出Item