天天看點

mysql資料庫去重複

說到去重複,感覺邏輯很簡單。但動手寫起來卻并不是那麼容易。面試的時候讓寫sql語句,然後沒完整的寫出來,然後面試官說你這沒結果啊!

去重複首先要把要留下的選出來,然後删除其他重複項。distinct雖然好用,但規則不明顯。這裡采用:select max(id) from user group by 重複依據。

1.取出要留下的資料,本次依據重複項的最大id為保留項。

1

2

3

4

<code>SELECT</code> <code>id,</code><code>name</code><code>,age </code><code>from</code> <code>person</code>

<code>WHERE</code> <code>id </code><code>in</code><code>(</code>

<code>SELECT</code> <code>MAX</code><code>(id) </code><code>from</code> <code>person </code><code>GROUP</code> <code>BY</code> <code>name</code><code>,age</code>

<code>);</code>

2.放入臨時表

5

<code>DROP</code> <code>TABLE</code> <code>IF EXISTS temp1;</code>

<code>CREATE</code> <code>TEMPORARY</code> <code>TABLE</code> <code>temp1 </code><code>SELECT</code> <code>id,</code><code>name</code><code>,age </code><code>from</code> <code>person</code>

3.清空原表并從臨時表注入

<code>TRUNCATE</code> <code>person;</code>

<code>INSERT</code> <code>INTO</code> <code>person </code><code>SELECT</code> <code>* </code><code>from</code> <code>temp1;</code>

<code>DROP</code> <code>TABLE</code> <code>if EXISTS temp1;</code>

<code>SELECT</code> <code>* </code><code>from</code> <code>person;</code>

當然也可以直接delete:

<code>DELETE</code> <code>from</code> <code>person </code><code>WHERE</code> <code>id </code><code>not</code> <code>in</code> <code>(</code>

<code>    </code><code>SELECT</code> <code>mid </code><code>FROM</code><code>(</code>

<code>        </code><code>SELECT</code> <code>MAX</code><code>(id) mid </code><code>from</code> <code>person </code><code>GROUP</code> <code>BY</code> <code>name</code><code>,age</code>

<code>    </code><code>) t</code>

<code>)</code>

本文轉自Ryan.Miao部落格園部落格,原文連結:http://www.cnblogs.com/woshimrf/p/5278683.html,如需轉載請自行聯系原作者