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
サブクエリー内の削除フラグはあってもなくても動作には影響ないきはします。
速度には影響あるかもだけど。