1

わかりましたので、取得方法がわからないかなり複雑なステートメントをグリッドビューに入力したいと思います。それが可能かどうかさえわかりません。5 つのテーブルと 1 つのビューが関係しています。これらはテーブル内のすべてのフィールドではありませんが、わかりやすくするために、必要なフィールドのみを配置しています。

生徒用テーブル:-

Student_ID
Specialization_ID

特殊化テーブル:-

ID
Specialization_Name
Department_ID

スタッフテーブル:-

ID
Staff_ID 
Department_ID

部門テーブル:-

ID
Department_Name

調査表:- (Usernameはアップローダ)

ID
Username

ユーザー ビュー:- (ここでは、student テーブルと staff テーブルの両方から , が取得されますUsername)Password

Username
Password
UserType

これは私がビューを作成した方法です:-

CREATE View [Users] as
Select Student_ID as Username, Password,'STU' as UserType from Student
union
Select Staff_ID, Password, 'STF' as UserType from Staff

ここで、スタッフ メンバーがサインインすると、彼のユーザー名が sessionSession["Username"]に保存されることを考慮して、データベースから取得したいのは、現在のユーザーに属する専門分野を持つユーザー (学生のみ) によってアップロードされたすべての調査です。デパートメント。すべての関係 (外部キー) が設定されていることを考えると、使用する必要がある SQL クエリは何ですか? または少なくとも方法。

4

3 に答える 3

1

要するに:まず、テーブル間の接続を把握してみてください (FK と PK - 開始点として、Specialization、Staff、Department テーブルには関係があるようです)。

次に、機能するクエリを考え出します。それをビューに変換してみて、レコードの数に応じてパフォーマンスを測定してください。

進め方のガイドラインですが、役立つと確信しています。

于 2012-12-13T23:50:33.680 に答える
0

ユーザーとスタッフの間に別のテーブルがない理由をお尋ねしてもよろしいですか?

複合キーとして 2 つの id 列を持ち、特殊化と部門テーブルを参照する 2 つの追加の列を持つ UserStaffTable と呼ぶことができますか? このようにして、常にスタッフ メンバーに属する学生のリストを取得し、専門分野や部門に基づいてそれらを除外できます。

これにより、サブクエリではなく結合を実行できます。

this SO answerによると、これが問題になる場合、サブクエリは遅くなります。

于 2012-12-14T03:02:12.317 に答える
0

わかりましたので、1時間の研削の後、サブクエリを使用して解決しました...助けてくれてありがとう。

    Select * From Survey where Username IN 
(Select Student_ID from Student where Specialization_ID IN 
(Select ID from Specialization where Department_ID = 
(Select Department_ID from Staff where Staff_ID =@Username)))
于 2012-12-14T01:31:33.327 に答える