Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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中所有对应的ID都相同,如何删除所有的行? id |编号 12摄氏度 21 | e 31 | a 43 | a 43 | a 43 | b 52 | x 52 | x 52 | x 53 | d_Mysql - Fatal编程技术网

如果mysql中所有对应的ID都相同,如何删除所有的行? id |编号 12摄氏度 21 | e 31 | a 43 | a 43 | a 43 | b 52 | x 52 | x 52 | x 53 | d

如果mysql中所有对应的ID都相同,如何删除所有的行? id |编号 12摄氏度 21 | e 31 | a 43 | a 43 | a 43 | b 52 | x 52 | x 52 | x 53 | d,mysql,Mysql,在上面的示例中,我希望保留与43对应的所有行,并删除属于52的所有行。我们可以在此处尝试使用聚合逻辑: DELETE FROM yourTable t1 WHERE t1.id IN (SELECT id FROM (SELECT id FROM yourTable GROUP BY id HAVING COUNT(*) > 1 AND COUNT(DISTINC

在上面的示例中,我希望保留与43对应的所有行,并删除属于52的所有行。

我们可以在此处尝试使用聚合逻辑:

DELETE
FROM yourTable t1
WHERE
    t1.id IN (SELECT id FROM (SELECT id FROM yourTable
                              GROUP BY id
                              HAVING COUNT(*) > 1 AND COUNT(DISTINCT number) = 1) x);

限制
COUNT(*)>1
确保
id
至少有两条记录,而
COUNT(DISTINCT number)=1
确保此
id
对于所有重复项具有相同的数值。我们将子查询包装一次,以避免在删除表时引用表时出现任何可能的MySQL错误。

这将删除与52对应的所有行。那些有43个和其他ID的将保留在表中

DELETE FROM table_name WHERE id = 52;
有基本操作,;你最好通读一些

更新:如果只想删除与重复id和数字组合对应的行,可以尝试以下SQL语句。它使用id和数字的串联来确定要删除的重复项

DELETE FROM table_name WHERE id IN ( 
  SELECT DISTINCT id from (
      select concat(id,'-',number) as connum from table_name
      group by connum
      having connum > 1
    )
  )

12号、21号和31号呢?解释被删除的确切内容及其原因。只删除一次属于52的内容,保留REST。我无法添加唯一的索引来删除43个,这与OP的意思不完全一样。他指的是如何删除特定id中只有相同编号的行。52是一个例子Hi@Tim Biegeleisen,你能帮我回答一个类似的问题吗?我有一阵子投了赞成票。让我检查一下如何接受