Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更好的SQL查询以删除等效行_Sql_Ms Access - Fatal编程技术网

更好的SQL查询以删除等效行

更好的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

伙计们,我是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
我在顺序代码中使用了两个嵌套循环来过滤重复项,但最终编写了一个查询,它可以工作,但感觉像是一个黑客

我任意使用WHERE(Item
SELECT *
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