久しぶりにSQL文を書いていて重複しているレコードを一行にまとめようと思ったところ少し困った。
name | id | comment |
---|---|---|
1 | 一太郎 | こんにちは |
2 | 二太郎 | こんにちは |
3 | 二太郎 | hello |
4 | 三太郎 | こんにちは |
こんなテーブルを
name | id | comment |
---|---|---|
一太郎 | 1 | こんにちは |
二太郎 | 2 | こんにちは |
三太郎 | 4 | こんにちは |
こうしたかった。
nameで絞ればいいだけですね。
そこで私はDISTINCTを使ってしまった。。。
DISTINCTが効かない…
SELECT DISTINCT Table_1.name, Table_1.id,Table_1.comment From Table_1
id | name | comment |
---|---|---|
一太郎 | 1 | こんにちは |
二太郎 | 2 | こんにちは |
二太郎 | 3 | hello |
三太郎 | 4 | こんにちは |
ダメじゃん…
当たり前ですね。
私は「SELECT DISTINCT Table_1.name」と書けばnameだけ重複しているレコードをまとめられると思っていたのです。
この勘違いで10分ぐらい取られてしまったorz
結局下のSQLで取得できました。
SELECT Table_1.name, Table_1.id,Table_1.comment From Table_1 WHERE id IN (SELECT min(id) FROM Table_1 GROUP BY name)
idの最小の値でnameをとってきました。
普通に考えれば指定してあげないと取得できないよね。。
久しぶりのSQL文に苦戦した僕でした。
Leave a Comment