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行。我不知道哪一个是一样的。我需要一个代码来比较它们答案 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'
)
)