データベースの重複データを削除

データベース内の重複したデータを削除して一覧表をつくった。

やりかた。

データベースの値を << メソッドで配列に格納してからuniqメソッドで重複した要素を削除。重複がなくなった配列からeachメソッドで1件ずつ出力した。

 

 --postgreSQL--

database名:stocklist

table名:stocklists

warehouse  stock1              stock2               stock3

倉庫1          りんご             バナナ               みかん

倉庫2          りんご               パイナップル     キウイ

倉庫3          ぶどう            メロン      みかん 

 

--ruby file--

require 'active_record'

ActiveRecord::Base.establish_connection(

    adapter: 'adaptername'

    host: ' '

    username: 'myname'

    password: ' '

    database: 'stocklist'

)

 

class Stocklist < ActiveRecord::Base

end

 

lists = Array.new

Stocklist.each do | stock |

    lists << stock['stock1'] << stock['stock2'] << stock['stock3']

end

 

lists.each { | list | puts list }

 

--出力見本--

りんご

バナナ

みかん

パイナップル

キウイ

ぶどう

メロン

 #重複なく出力成功

 

失敗例

ブロック内で出力をかけたら、各レコード毎に出力してしまい、3重に出力してしまった。

Stocklist.each do | stock |

    lists << stock['stock1'] << stock['stock2'] << stock['stock3']

    lists.each do | list |

        puts list

    end

end

 

--出力見本--

りんご #倉庫1の在庫

バナナ

みかん

りんご  #倉庫1 + 倉庫2の在庫

バナナ

みかん

パイナップル

キウイ

りんご  #倉庫1 + 倉庫2 + 倉庫3の在庫

バナナ

みかん

パイナップル

キウイ

ぶどう

メロン

#3重に出力されてしまう。

 

なので stock を格納するブロックが終わったあとに、あらためてeachメソッドで変数 listsの出力をするとうまくいく。