Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Sql Server_Database_Duplicate Removal - Fatal编程技术网

Sql 重复几行

Sql 重复几行,sql,sql-server,database,duplicate-removal,Sql,Sql Server,Database,Duplicate Removal,我有一张桌子: model1 model2 speed ram ----- ------ ------ ---- 1121 1233 750 128 1232 1233 500 64 1232 1260 500 32 1233 1121 750 128 1233 1232 500 64 1260 1232 500 32 我需要删除model1和model2的重复对 这里这些行是4-6行。查看第一行: mod

我有一张桌子:

model1 model2 speed  ram
-----  ------ ------ ----
1121   1233   750    128
1232   1233   500    64
1232   1260   500    32
1233   1121   750    128
1233   1232   500    64
1260   1232   500    32
我需要删除model1和model2的重复对

这里这些行是4-6行。查看第一行:

model1 1121     model2 1233
副本是

型号1 1233型号2 1121 等等

意味着如果model1+model2=model2+model1-这是重复的

我试过使用这样的问题:

where cast(model1 as char(4))+cast(model2 as char(4))<>cast(model1 as char(4))+cast(model2 as char(4))

。我怎么做?谢谢。

如果您想从结果中筛选出重复项,似乎只需:

where cast(model1 as char(4))+cast(model2 as char(4))<>cast(model1 as char(4))+cast(model2 as char(4))
AND cast(model1 as char(4))+cast(model2 as char(4))<>cast(model2 as char(4))+cast(model1 as char(4))

如果要从结果中筛选出重复项,似乎应该是:

where cast(model1 as char(4))+cast(model2 as char(4))<>cast(model1 as char(4))+cast(model2 as char(4))
AND cast(model1 as char(4))+cast(model2 as char(4))<>cast(model2 as char(4))+cast(model1 as char(4))

未经测试,使用风险自负,但可以作为起点

要仅查看唯一性,请执行以下操作:

select model1,model2 from T
EXCEPT
select model2,model1 from T where model2 > model1;

未经测试,使用风险自负,但可以作为起点

要仅查看唯一性,请执行以下操作:

select model1,model2 from T
EXCEPT
select model2,model1 from T where model2 > model1;

要按定义选择重复项,请执行以下操作:

SELECT * 
FROM Table1 a
WHERE EXISTS (  SELECT *
                FROM Table1 b 
                WHERE  a.model1 = b.model2
                 AND   a.model2 = b.model1
             )
AND model2 < model1

演示:

要按定义选择重复项,请执行以下操作:

SELECT * 
FROM Table1 a
WHERE EXISTS (  SELECT *
                FROM Table1 b 
                WHERE  a.model1 = b.model2
                 AND   a.model2 = b.model1
             )
AND model2 < model1

演示:

首先,您应该改进插入,如果在插入之前对值进行排序,则不应再重复

要删除存在另一个排序组合的所有行,请使用以下命令:

DELETE FROM table
FROM table t1
WHERE EXISTS (
  SELECT NULL
  FROM table t2 
  WHERE t2.model1 = t1.model2
  AND t2.model2 = t1.model1)
WHERE t1.model2 > t1.model1

这在mssql 2005和更高版本中应该可以使用,但我现在无法检查语法。从这里开始,将剩余数据更新到已排序的列应该很简单:

首先,您应该改进插入,如果在插入之前对值进行排序,则不应再重复

要删除存在另一个排序组合的所有行,请使用以下命令:

DELETE FROM table
FROM table t1
WHERE EXISTS (
  SELECT NULL
  FROM table t2 
  WHERE t2.model1 = t1.model2
  AND t2.model2 = t1.model1)
WHERE t1.model2 > t1.model1


这在mssql 2005和更高版本中应该可以使用,但我现在无法检查语法。从这里开始,将剩余数据更新到已排序列应该很简单:

要选择唯一记录还是删除重复记录?我要删除模型1和模型2的重复对。因此,如果Mult1+Multudi2= Metry2+Multudio-应该删除该记录,那么您可以处理中间ID中的一些分隔符作为字符串的级联ID。你用的是什么数据库管理系统?你用的是什么数据库引擎?其中一些记录的语法不同。我使用MS SQL Server。是否要选择唯一记录或删除重复记录?我要删除模型1和模型2的重复对。因此,如果Mult1+Multudi2= Metry2+Multudio-应该删除该记录,那么您可以处理中间ID中的一些分隔符作为字符串的级联ID。你用的是什么数据库管理系统?你用的是什么数据库引擎?有些句子的语法不同。我使用MS SQL Server。我想我需要得到你的第一句话,但它返回空结果。我不理解你的评论。您正在执行的返回空结果的完整查询是什么?我正在使用您的查询的第一个。我想我需要获取您的句子的第一个,但它返回空结果。我不理解您的评论。您正在执行的返回空结果的完整查询是什么?我使用的是您的查询的第一个。我尝试使用intersect,它不起作用。我不需要删除重复项,我只需要通过查询返回unique。谢谢你,乌萨特很奇怪。当你使用intersect时,你介意公布你的错误吗?若要仅查看唯一项,请使用EXCEPT而不是INTERSECTION如果表中只包含重复项,这意味着它正在工作:我将编辑答案我尝试使用INTERSECTE时,它不工作。我不需要删除重复项,我只需要通过查询返回unique。谢谢你,乌萨特很奇怪。当你使用intersect时,你介意公布你的错误吗?若要仅查看唯一的,请使用EXCEPT而不是INTERSECTION。如果您的表仅包含重复项,这意味着它正在工作:我将编辑答案非常感谢。现在我想测试一下你的答案。非常感谢。现在我试着测试你的答案。