数据库删除具有相同值的行

时间:2011-12-03 11:09:26

标签: php mysql sql database

  
    

重复How to delete duplicate records in mysql database?

  
   id  |  name   |      link
    1     bla     www.google.com
    2     lal     www.stackoverflow.com
    3     afs     www.google.com
    4     sds     www.microsoft.com

在我的数据库中,有些行具有相同的链接。我想删除其中一个具有相同链接的行。

例如,在我的例子中,我想删除id = 3的行,但我想保持id = 1。

我该怎么做?

顺便说一下,有5840行。我不知道哪一个是一样的。我需要一个代码来比较它们

6 个答案:

答案 0 :(得分:3)

技巧是通过比较ID来保持最新价值

DELETE FROM table_name t1, table_name t2 WHERE t1.name = t2.name and t1.link = t2.link and t1.id < t2.id

这只是一个想法,这是我的oracle环境中的一个功能齐全的示例(我没有使用db几周,所以我现在正在尝试最小化查询,抱歉)

SQL> select * from dup;

    ID    STH       STH2
---------- ---------- ----------
     1     45         45
     2     45         56
     3     45         45
     4     14         56
     5     14         56


DELETE FROM dup where id in (SELECT DISTINCT t1.id FROM dup t1, dup t2 WHERE t1.sth = t2.sth and t1.sth2 = t2.sth2 and t1.id < t2.id);

SQL> select * from dup;

    ID    STH       STH2
---------- ---------- ----------
     2     45         56
     3     45         45
     5     14         56

答案 1 :(得分:0)

好吧,对于SQL,你必须指定通常保留哪一个。例如,为第一个id定居。然后你可以做一个

select min(id), link from TABLE group by link

然后删除link与最小ID不匹配的所有内容。应该是单个(尽管是嵌套的)SQL语句。

答案 2 :(得分:0)

您可以选择第一次出现,例如google.com,然后获取第一个google.com条目的ID(例如first_ID)并删除此ID后面的所有内容

DELETE FROM table where id&gt; first_ID AND链接,例如'www.google.com'

答案 3 :(得分:0)

如果您知道网址,但不知道ID,但知道您只想删除网址,则可以使用限制。

DELETE FROM `table` WHERE `link` = 'www.google.com' LIMIT 1

或者,如果您知道名称和链接,请一起使用。

DELETE FROM `table` WHERE `name` = 'afs' AND `link` = 'www.google.com'

答案 4 :(得分:0)

未经测试,但我认为这会奏效


$query="SELECT * FROM tablename"; 
$result=mysql_query($query);

while($row = mysql_fetch_array($result) { $query1="SELECT * FROM tablename WHERE link = '".$row[2]."'"; $result1=mysql_query($query1); $count = mysql_num_rows($result1); mysql_query("DELETE FROM tablename WHERE link='".$row[2]."' LIMIT 1,$count"); echo "deleted $row[1]
"; }

答案 5 :(得分:0)

好的我已将此设置为单独的答案并删除了我的另一个

首先,选择表格中的所有不同链接

SELECT DISTINCT( link ) FROM table

然后,使用PHP循环返回的每一行,并将下面的SQL应用于已提交的链接。

DELETE FROM table
WHERE id IN (
   //Selects Ids whose value is more than the 1st occurence
   SELECT id 
   FROM table 
   WHERE 
             link = 'CURRENT_LINK' 
         AND id > ( // Check this isn't the first occurence
                      SELECT MIN( id ) 
                      FROM table
                      WHERE link = 'CURRENT_LINK'
                  )
)