前提
テーブル[tbl_staff_skill]にスタッフの保持しているスキルを格納しています。
※スタッフが保持していないSkillは[tbl_staff_skill]にデータは無し
######[tbl_skill]
スキル一覧
★skillID | skillType | skillItem |
---|---|---|
A01 | 言語 | ASP.NET |
A02 | 言語 | C# |
A03 | 言語 | SQL |
######[tbl_staff_skill] |
- スタッフの保持しているスキル一覧
- DBでのpractice_flagとtraining_flagのデフォルト値は0で設定
staffID | ★skillID | practice_flag | training_flag |
---|---|---|---|
00001 | A01 | 0 | 1 |
00001 | A02 | 1 | 1 |
00002 | A01 | 1 | 1 |
00002 | A03 | 0 | 1 |
実現したいこと
テーブル[tbl_skill]のデータをすべて表示させ、
テーブル[tbl_staff_skill]の[staffID]='00001'のデータと結合したい。
(⇒staffID=00001の持っているスキルと持っていないスキルを表示させたい)
【イメージ】
######[vw_staff_skill]
★skillID | skillType | skillItem | practice_flag | training_flag |
---|---|---|---|---|
A01 | 言語 | ASP.NET | 0 | 1 |
A02 | 言語 | C# | 1 | 1 |
A03 | 言語 | SQL | 0 | 0 |
※skillID=03のデータはテーブル[tbl_staff_skill]にはないが、表示する
上記のようなVIEWの作成は可能でしょうか。
もし可能でしたら、ご教授いただきたく。
よろしくお願いいたします。
試したこと
・LEFT JOINを使用
html
1SELECT dbo.tbl_skill.*, dbo.tbl_staff_skill.staffID, dbo.tbl_staff_skill.practice_flag, dbo.tbl_staff_skill.training_flag 2FROM dbo.tbl_skill 3LEFT OUTER JOIN dbo.tbl_staff_skill ON dbo.tbl_skill.skillID = dbo.tbl_staff_skill.skillID 4WHERE (dbo.tbl_staff_skill.staffID = 00001) OR (dbo.tbl_staff_skill.staffID IS NULL)
⇒既に他のstaffIDで登録されているtbl_skillのデータは表示されなくなってしまう
・UNIONを使用してみる
テーブル[tbl_staff_skill]にデータが登録されていないがpractice_flagやtraining_flagに1が入ったデータも入ってきてしまう
以上から、
テーブル[tbl_staff_skill]に
一つの[staffID]に対してテーブル[tbl_skill]のすべての[skillID]を結び付けたSQL文を
あらかじめ発行しておく方法しか浮かばなかった為、
別のSQLで対処できる方法がないかとこちらにて質問させていただきました。
(例)
INSERT INTO dbo.tbl_staff_skill VALUES (00001, 'A01', 0, 0);
INSERT INTO dbo.tbl_staff_skill VALUES (00001, 'A02', 0, 0);
INSERT INTO dbo.tbl_staff_skill VALUES (00001, 'A03', 0, 0);
....続
補足情報(FW/ツールのバージョンなど)
使用しているDB:SQL Server 2019
ASP.NET Webフォームでスタッフのスキル登録ができるウェブアプリを作成しています
回答2件
あなたの回答
tips
プレビュー