Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql 如何基于另一列删除其中一个重复项?_Mysql_Sql - Fatal编程技术网

Mysql 如何基于另一列删除其中一个重复项?

Mysql 如何基于另一列删除其中一个重复项?,mysql,sql,Mysql,Sql,这是所提问题的后续行动 假设我在上面的问题中的模式中有另一个名为“primary”的列,所以现在它看起来像这样: 石头桌: stone_id = 412 upcharge_title = "sapphire" primary = 1 stone_id = 412 upcharge_title = "sapphire" primary = 0 我想删除“stone_id”和“upcharge_title”字段中重复的行,并且“primary”字段的值等于0,但保留primary值等于1的另一行

这是所提问题的后续行动

假设我在上面的问题中的模式中有另一个名为“primary”的列,所以现在它看起来像这样:

石头桌:

stone_id = 412 upcharge_title = "sapphire" primary = 1
stone_id = 412 upcharge_title = "sapphire" primary = 0
我想删除“stone_id”和“upcharge_title”字段中重复的行,并且“primary”字段的值等于0,但保留primary值等于1的另一行


如何使用MySQL实现这一点?

您可以通过自连接实现:

delete t1
from tablename t1 inner join tablename t2
on t1.stone_id = t2.stone_id and t1.upcharge_title = t2.upcharge_title 
and t1.primary = 0 and t2.primary = 1 
参见。

一种方法是:

delete t
    from t join
         (select stone_id, upcharge_title, max(primary) as max_primary
          from t
          group by stone_id, upcharge_title
         ) tt
         using (stone_id, upcharge_title)
    where t.primary = 0 and tt.max_primary = 1;

您可以使用子查询方法

delete from tbl
where primary != 0 and (stone_id, upcharge_title) = (
  select stone_id, upcharge_title
  from tbl
  group by stone_id, upcharge_title
  having count(*) > 1
)

这到底是怎么回事?我似乎无法将我的注意力集中在它上面。表中primary=0的每一行都连接到primary=1的另一行,并且具有相同的stone\u id和upcharge\u标题(如果存在)。因此,对于每一个这样的匹配,primary=0的行都会被删除。我为没有遵循这些准则而道歉。下一次,我将尽我所能更具描述性,并提供更好的模型,以帮助其他人在询问与SQL查询相关的问题时回答我的问题。