- ベストアンサー
SELECT文での絞り込み方法についての質問
- こんにちは、SELECT文での絞り込み方法についてうまく行かないので質問させてください。
- MST_USERとMST_USER_SETTINGという2つのテーブルからメールアドレスを取得したいと考えています。
- やりたいことは、MST_USER_SETTINGから2年生の教師のUSER_IDを取得してMST_USERのMAILADDRESSを取得したいということです。しかし、WHERE句の指定がうまくいかず、正しく取得できません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
再度登場です^^; それでしたら「SELECT_ID」フィールドに教師、保護者、学生などを、「OPTION_ID」に学年を定義すれば良いのでは?
その他の回答 (3)
- ww-_-ww
- ベストアンサー率51% (46/89)
再三すいません。 「汎用性」というのがどこまでのものなのか把握でききれずに回答していました。 「汎用性」という意味はかなり抽象的ですから。 先ほど記載されたSQL文であれば確かにご希望の値が取得できるかと思います。 こちらこそ、まともなアドバイスが出来ていないようで申し訳ありませんでした。
お礼
ww-_-wwさま ご回答ありがとうございます。 >「汎用性」という意味はかなり抽象的ですから。 ご指摘の件、申し訳ないと思います。 また、おっしゃる通りだとも思います。 まともなアドバイスが出来なかったとの事ですが、そのような事はありません。 テーブル設計について再考できましたし、貴重なアドバイスだったと感謝しています。 今後ともよろしくお願い致します。
- ww-_-ww
- ベストアンサー率51% (46/89)
こんにちわ。 テーブル2としては以下のように持てばいいのでは? USER_ID GAKUNEN MEMBER --------+------------+------- 1 │1 │KYOUSHI 2 │1 │HOGOSHA 3 │1 │GAKUSEI 4 │2 │KYOUSHI 5 │2 │HOGOSHA 6 │2 │GAKUSEI 仕様をすべて把握していないので、この程度でしかいえなくて申し訳ない。
補足
ww-_-wwさま。 ご回答ありがとうございます。 申し訳けございません、テーブル2なのですがフィールドを固定にする事は出来ないのです。 テーブルは自由に定義できますが、飽くまでも汎用性を持たせなければならないのです。 ちなみに何をやっているかというと・・・ 1.管理者が管理する項目を決める(SELECT_ID) 2.利用者が自分に当てはまる内容を設定する(OPTION_ID) 3.管理者は条件(SELECT_ID/OPTION_ID)を指定して該当する利用者を抽出する 上のような事です。 管理する項目としては 1.学校を想定した場合 学年、分類(学生/保護者/教師)、etc... 2.飲食店を想定した場合 性別、誕生月、etc... と言うように、可変なのです。
- ww-_-ww
- ベストアンサー率51% (46/89)
こんにちわ。 個人的には2のテーブル設計を見直したほうが良いかと思います。 あまりにも設計が悪く見えます。
補足
ww-_-wwさま。 ご回答ありがとうございます。 >個人的には2のテーブル設計を見直したほうが良いかと思います。 >あまりにも設計が悪く見えます。 確かにおっしゃる通りだと思います。 でも、これ以上のことが他に思いつかなかったのです。 2のテーブル設計、どうすれば良いのか・・・? 正直、悩んでいます。 要件は、「ユーザの付帯情報を可変に出来る事」だったので、 このようにしたのですが、、、 この件を含め、良い案があれば、何卒よろしくお願い致します。
補足
ww-_-wwさま。 ご回答ありがとうございます。 >それでしたら「SELECT_ID」フィールドに教師、保護者、学生などを、「OPTION_ID」に学年を定義すれば良いのでは? 申し訳ございません、私の読解力がないせいかもしれませんが、そのようにすると、汎用性が無くなるのではないか?と思います。 (多分、SELECT_ID=教師、OPTION_ID=2 と言うふうに・・・と言うアドバイスだと思いながら、書いています。) 仲間に相談したところ、今回のSQL文では SELECT A.USER_ID, A.MAILADDRESS FROM MST_USER A, (SELECT * FROM MST_USER_SETTING WHERE SELECT_ID = 'BUNRUI' AND OPTION_ID = 'KYOUSHI' ) B, (SELECT * FROM MST_USER_SETTING WHERE SELECT_ID = 'GAKUNEN' AND OPTION_ID = '2' ) C WHERE A.USER_ID = B.USER_ID AND B.USER_ID = C.USER_ID と言うように記述し、JOINする部分はSELECT_ID単位にコードで吐かせるようにすれば? とアドバイスを受けました。 確かにSELECT_IDに設定される内容が可変なので、これならうまく行く、と考えています。 そもそも、やりたい事は単純だけど無理がある、もしかしてテーブル設計ミス?とも考えていますが、やはり、これ以外に思いつかないのが現状です。