Mysql 如何基于另一列删除其中一个重复项?
这是所提问题的后续行动 假设我在上面的问题中的模式中有另一个名为“primary”的列,所以现在它看起来像这样: 石头桌: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的另一行
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查询相关的问题时回答我的问题。