2011-10-13 42 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

相關問題