質問: '派遣' and 承認者 ='派遣' なにとぞよろしくお願いいたします。
回答: こういった場合、以下のようなマスタ類を整備します。 ■状態マスタ 状態コード、状態 ・10:登録済み ・20:申請済み ・30:本社承認済み ・40:連携済み ・50:反映済み "本社承認済み"以前は、「where 状態コード > 30」で表現可能です。 ※というか、以前以後を表現するためには「本社承認済み」という文字列では表現できません。 また、ユーザに対しては参照可能な「状態コード」を付与します。 こうすることで、ユーザが参照可能な状態を定義します。 ■ユーザマスタ ユーザID、参照可能状態コード、ユーザ名 ・01 10 社長 ・02 10 部長 ・03 10 課長 ・04 40 係長 ・05 40 一般職 ・06 40 派遣 こうしておけば以下条件で各ユーザが参照可能な状態を指定できます。 ユーザ毎に個別指定も可能です。 「where 状態コード >= 参照可能状態コード」 一般職は40からしか見られなくなりますし、課長は10から見られます。 ■状態マスタ ・99 すべて ・10 登録済み ・20 申請済み ・30 本社承認済み ・40 連携済み ・50 反映済み (1) 検索条件取得 「一般職」が状態「登録済み」を指定。 ・ユーザID(05)と参照可能状態コード(40)を取得 ・指定された状態(10)を取得 (2)SQLの組み立て (1)で取得した条件を以下に当てはめていきます。 カッコで条件の優先順位を定義します。 条件は(a)、(b)、(c)に分けます。 (a) 自己データの検索部分 (b)ユーザ権限による検索部分 (c)指定された状態を権限に付与する。 優先順位は以下にします。 ただし、(c)の条件は99の場合は指定しません。 ( (a) or (b) ) and (c) 以下のようなSQLとなります。 --(a) 自己データの検索部分 -- 登録者、申請者 、承認者が自分 の場合は、状態を検索条件にしない。 where ( ( (登録者コード = 05 or 申請者コード = 05 or 承認者コード = 05 ) ) -- (b)ユーザ権限による検索部分 -- 参照可能な状態を指定する。 or ( where 状態コード >= 40) ) -- (c)指定された状態を権限に付与する。 -- ※99の場合は条件指定を省略 and 状態コード = 10 -- これくらいのテーブル構成でないと、実現はできないと思います。 じゃないと、java内部で条件指定を直書きすることになります。 あと、これだと(and条件)、登録も申請も承認も「派遣」の人が全部やったデータしかみられませんよ? >Select * from 予定情報 where 状態 ='登録済み' >and 登録者 = '派遣' and 申請者 = '派遣' and 承認者 ='派遣'