Q.以下の「表」というテーブルにて、有効なアカウントを抽出するSQLを作成せよ。但し、有効条件は以下とする。
・削除フラグが0であること。
・メールアドレスが重複している場合,もっとも最後に登録されたもののみ有効とする。但し、メールアドレスが空の場合は重複チェックを行わない。
| 登録NO | 名前 | メールアドレス | 削除フラグ |
| 1 | A | [email protected] | 0 |
| 2 | B | 0 | |
| 3 | C | [email protected] | 1 |
| 4 | D | [email protected] | 0 |
| 5 | E | [email protected] | 1 |
| 6 | F | 0 | |
| 7 | A | [email protected] | 0 |
| 8 | C | [email protected] | 0 |
| 9 | G | [email protected] | 1 |
| 10 | A | [email protected] | 1 |
A
SELECT * FROM 表 WHERE 削除フラグ=0 and (登録NO IN (SELECT max(登録NO) FROM 表 WHERE 削除フラグ=0 and メールアドレス <> ” group by メールアドレス) or メールアドレス = ”)
サブクエリーを使わないと一発で書けない例ですねえ…。
重複判定条件がいやらしいw
サブクエリー内の削除フラグはあってもなくても動作には影響ないきはします。
速度には影響あるかもだけど。