今回のテーマは、テーブル emp_no の重複レコードを削除し、最小の ID に対応するレコードのみを保持します。
それでは、始めましょう
流れ
- テーブル emp_no を作る
- テーブル emp_no に レコードを挿入する
- 今回のテーマの解答
順番にやっていきます。
1.テーブル emp_no を作る
CREATE TABLE IF NOT EXISTS titles_test (
id int(11) not null primary key,
emp_no int(11) NOT NULL,
title varchar(50) NOT NULL,
from_date date NOT NULL,
to_date date DEFAULT NULL);
2.テーブル emp_no に レコードを挿入する
insert into titles_test values
('1', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('2', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('3', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('4', '10004', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('5', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('6', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('7', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01');
挿入後は、下記の通り
+----+--------+-----------------+------------+------------+
| id | emp_no | title | from_date | to_date |
+----+--------+-----------------+------------+------------+
| 1 | 10001 | Senior Engineer | 1986-06-26 | 9999-01-01 |
| 2 | 10002 | Staff | 1996-08-03 | 9999-01-01 |
| 3 | 10003 | Senior Engineer | 1995-12-03 | 9999-01-01 |
| 4 | 10004 | Senior Engineer | 1995-12-03 | 9999-01-01 |
| 5 | 10001 | Senior Engineer | 1986-06-26 | 9999-01-01 |
| 6 | 10002 | Staff | 1996-08-03 | 9999-01-01 |
| 7 | 10003 | Senior Engineer | 1995-12-03 | 9999-01-01 |
+----+--------+-----------------+------------+------------+
3. 解答
- まず、最小の ID に対応するレコードを見つける
- 次に、最小の ID に対応するレコードと重複しているレコードを見つける
- 最後に、その重複レコードを全部削除する
delete from titles_test
where id in
(
select * from
(
select tt.id
from titles_test as tt,
(
select emp_no, min(id) as id from titles_test
group by emp_no
) a
where tt.emp_no = a.emp_no
and tt.id not in (a.id)
) as T1
);
結果確認
+----+--------+-----------------+------------+------------+
| id | emp_no | title | from_date | to_date |
+----+--------+-----------------+------------+------------+
| 1 | 10001 | Senior Engineer | 1986-06-26 | 9999-01-01 |
| 2 | 10002 | Staff | 1996-08-03 | 9999-01-01 |
| 3 | 10003 | Senior Engineer | 1995-12-03 | 9999-01-01 |
| 4 | 10004 | Senior Engineer | 1995-12-03 | 9999-01-01 |
+----+--------+-----------------+------------+------------+
コメント