2011-10-13 40 views
-1

与其他形式的双项我有表像我怎么能删除不同的列

rowsid  source_row same_as_row 

row1  1    18  

row2  3     18 

row3  18    1 

row4  18    3 

我只想elimate的rows3和ROW4:

row3  18    1 

row4  18    3 

哪个查询!删除查询ROW3和ROW4。帮助

+1

怎么你的数据最终得到复制?似乎删除是一个好主意,但是它阻止了重新生成? (我们还需要更多的信息,比如你如何判断哪一行优先?) –

+0

你能为你真正想做的事情做一个真实的例子吗?是你的桌子吗? –

+0

什么RDBMS请? – gbn

回答

2
DELETE FROM table 
GROUP BY sourcerow 
HAVING COUNT(*) > 1 

它应该这样做,假设你只有在sourcerow列寻找重复值

+0

错误的sql,我不想要eleminate widht count(*)> 1,我想elenateate duplicata betweenn source_row same_as_row – schweinsteiger

+0

@AbdelillahFarka:所以如果有行数count(*)same_as_row> 1 delete id在那里描述? – genesis

+0

不会倒下,因为问题仍不清楚。但是,鉴于OP想要删除的示例行,此查询看起来不正确。 – JohnFx

1

编辑:井喷我失望(前面的答案被删除)

由于双重嵌套的作品,这是我做的方式(即使它的一部分是从逻辑的观点来看高度冗余)

DELETE 
    yourTable 
FROM 
    yourTable 
INNER JOIN 
    (SELECT * FROM (SELECT same_as_row FROM yourTable GROUP BY same_as_row)) as lookup 
    ON lookup.same_as_row = yourTable.source_row 
WHERE 
    source_row > same_as_row 
+0

您可以使用子查询。你只需要将它嵌套到派生表中即可。 –

+0

@MartinSmith:根据编辑?如果是这样,为什么它工作?与范围有关?或者因为最深的子查询不相关? – MatBailie

+0

[在此处解释](http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/)。派生表隐式地物化到临时表中。 –

1
select 
    rowsid, source_row, same_as_row 
from tablename t1 
where not exists 
(
    select * from tablename t2 
    where t2.source_row = t1.same_as_row and t2.same_as_row = t1.source_row and t1.rowsid > t2.rowsid) 
) 
+0

觉得你很尴尬。 – schweinsteiger

0

DELETE FROM表 GROUP BY rowsid,source_row,same_as_row HAVING COUNT(*)> 1

相关问题