◆実現したい内容
あるテーブルにデータを登録します。そのテーブル情報は、複数の人に参照されるとします。
テーブル情報は、人単位に参照したかどうか印を付けます。
事例
例えば、グループ同報をイメージ。
あるグループには、複数人のメンバがいます。
メンバ向けのお知らせ情報はみんなに同時配信されます。
自分がまだチェックしていないお知らせは、未チェックの印が表示されます。
※グループのメンバは、増減がある可能性があるので、お知らせをチェックしたかどうかの情報は、御知らせ情報とは離して管理するようにします。
テーブル構成
■グループメンバテーブル [T_GROUP]
カラム | 型 | 備考 |
---|---|---|
MEMBER_CD | varchar(3) | 主キー |
MEMBER_NM | varchar(10) | NOT NULL |
■お知らせ情報テーブル [T_NOTICE]
カラム | 型 | 備考 |
---|---|---|
ID | int | 主キー |
TITLE | varchar(10) | NOT NULL |
BODY | varchar(30) | NOT NULL |
■チェック済情報テーブル [T_CHECKED]
カラム | 型 | 備考 |
---|---|---|
ID | int | 主キー |
MEMBER_CD | varchar(3) | 主キー |
テストケース
例えば、こんな情報が登録されている場合
■グループメンバテーブル [T_GROUP]
メンバが3名のグループとします。
MEMBER_CD | MEMBER_NM |
---|---|
M01 | たろう |
M02 | はなこ |
M03 | トミー |
■お知らせ情報テーブル [T_NOTICE]
お知らせが5件登録されています。
ID | TITLE | BODY |
---|---|---|
1 | タイトル1 | 001のお知らせです。 |
2 | タイトル2 | 002のお知らせです。 |
3 | タイトル3 | 003のお知らせです。 |
4 | タイトル4 | 004のお知らせです。 |
5 | タイトル5 | 005のお知らせです。 |
■チェック済情報テーブル [T_CHECKED]
お知らせ情報に対する各メンバのお知らせチェック状況は次の通りです。
ID | MEMBER_CD |
---|---|
1 | M01 |
3 | M01 |
3 | M03 |
テスト検証
メンバ毎に届いているお知らせの状態を確認します。
SQLは、こちらです。
SELECT
N.ID AS 'お知らせID'
, N.TITLE AS 'タイトル'
, N.BODY AS '本文'
, CASE
WHEN CC.MEMBER_CD IS NULL THEN '未'
ELSE '' END AS 'チェック'
FROM
T_NOTICE N
LEFT OUTER JOIN
(SELECT
C.ID AS ID
,C.MEMBER_CD AS MEMBER_CD
FROM
T_CHECKED C
WHERE C.MEMBER_CD = 'M01') CC -- ★M01の場合。対象のMEMBER_CDを設定して実行
ON CC.ID = N.ID;
■M01:たろう
お知らせID | タイトル | 本文 | チェック |
---|---|---|---|
1 | タイトル1 | 001のお知らせです。 | |
2 | タイトル2 | 002のお知らせです。 | 未 |
3 | タイトル3 | 003のお知らせです。 | |
4 | タイトル4 | 004のお知らせです。 | 未 |
5 | タイトル5 | 005のお知らせです。 | 未 |
■M02:はなこ
お知らせID | タイトル | 本文 | チェック |
---|---|---|---|
1 | タイトル1 | 001のお知らせです。 | 未 |
2 | タイトル2 | 002のお知らせです。 | 未 |
3 | タイトル3 | 003のお知らせです。 | 未 |
4 | タイトル4 | 004のお知らせです。 | 未 |
5 | タイトル5 | 005のお知らせです。 | 未 |
■M03:トミー
お知らせID | タイトル | 本文 | チェック |
---|---|---|---|
1 | タイトル1 | 001のお知らせです。 | 未 |
2 | タイトル2 | 002のお知らせです。 | 未 |
3 | タイトル3 | 003のお知らせです。 | |
4 | タイトル4 | 004のお知らせです。 | 未 |
5 | タイトル5 | 005のお知らせです。 | 未 |
以上です。