2017-07-20 58 views
0

這是我的記錄。如何刪除只有一列sql中重複的行?

我只是想

PACK刪除記錄=「1`S」

,但如果該行沒有任何重複,即使其PACK是等於「1` S'它會保持。

我能做的唯一的事情就是檢查有重複的記錄。 並刪除PACK = 1的記錄。

SELECT Name, COUNT(*) as duplicates FROM table1 Group by Name having COUNT(*) >1 Order by duplicates

注:我只替換刪除與SELECT

SELECT * FROM table1 WHERE PACK = '1's'

如果您有任何疑問,請只問。謝謝!

+2

哪個數據庫? – Rams

+3

這裏的大多數人都想要格式化文本,而不是圖像或指向圖像的鏈接。 – jarlh

+0

你的努力是什麼? –

回答

0

所以,你要刪除這存在一個具有相同的名稱和類別,另一組記錄任何1`S記錄。您可以準確一詞在此SQL:

delete from table1 
where pack = '1`S' 
and exists 
(
    select * 
    from table1 other 
    where other.name  = table1.name 
    and other.category = table1.category 
    and other.pack  <> table1.pack 
); 

這是標準的SQL,應該在大約每DBMS工作。由於MySQL是臭名昭着的例外,因爲他們禁止再次在子查詢中直接使用更新後的表。在這裏你必須用from (select * from table1) other替換from table1 other

0

也許這PL/SQL可以指導你:

Delete from table1 
    where id not in (select min(id) 
         from table1 
         where pack = '1`S' 
         group by name 
         having count(*) = 1 
        ) 
      and pack = '1`S'; 
+0

這對t-sql也是一樣的 – dbajtr

+0

這不是PL/SQL。 PL/SQL是內置於DBMS中的Oracle編程語言。你展示的是SQL。 –

+0

「PL/SQL是SQL與編程語言的過程特徵的結合。」我想強調的是,這是Oracle DBMS的語法。 –

0

INNER JOIN表上本身的ID字段是不是由加盟發現ID字段較大的限制。如果沒有重複,則不會有任何結果。如果有重複,最近添加的內容將被刪除。