-2

これが大まかなスケッチです。前提条件テーブルと件名テーブルがあります。サブジェクトコードをリストする方法は大まかにわかっています。しかし、サブジェクトの名前と詳細を一覧表示できるクエリを取得する方法が本当にわかりません。これは前提条件です。

たとえば、サブジェクト名とその前提条件の名前を一覧表示するクエリを作成したいと思います。したがって、結果は次のようになります (連結テキストは後で行います): "Introduction to Computer is a prerequisite of Operating Systems".

これら 2 つのテーブルから被験者の名前を抽出するにはどうすればよいのでしょうか。

CREATE TABLE subjects (
subject_code VARCHAR(7) NOT NULL CONSTRAINT subject_pk PRIMARY KEY,
subject_name VARCHAR(50) NOT NULL,
subject_details TEXT NOT NULL
);



CREATE TABLE SubjectPrerequisite
(   Primary_Subject_Code        VARCHAR(7) NOT NULL,
    Prerequisite_Subject_Code   VARCHAR(7) NOT NULL,
    CONSTRAINT PK_SubjectPrerequisite PRIMARY KEY (Primary_Subject_Code, Prerequisite_Subject_Code),
    CONSTRAINT FK_SubjectPrerequisite_Primary_Subject_Code FOREIGN KEY (Primary_Subject_Code) REFERENCES Subject (Subject_Code),
    CONSTRAINT FK_SubjectPrerequisite_Prerequisite_Subject_Code FOREIGN KEY (Prerequisite_Subject_Code) REFERENCES Subject (Subject_Code)
)

//編集:これが私がこれまでに持っているものです

SELECT  subject_name
FROM SubjectPreRequisite t0
INNER JOIN subjects t1
ON t0.subject_code = s1.prerequisite_subject_code
4

4 に答える 4

1

サブジェクト名の全リストが必要だと仮定して、次のクエリを実行します。

select subject_name from subjects

サブジェクトの前提条件が必要で、subject_code が Primary_Subject_Code と関係があると仮定すると、次のクエリを実行します。

select s.subject_name, r.Prerequisite_Subject_Code
from subjects s
inner join SubjectPrerequisite r on s.subject_code = r.Primary_Subject_Code

そしてあなたの連結で:

select r.Prerequisite_Subject_Code ' + is a pre-requisite of ' + s.subject_name as 'Pre-Requisites'
from subjects s
inner join SubjectPrerequisite r on s.subject_code = r.Primary_Subject_Code
于 2012-05-30T14:40:38.333 に答える
1

前提条件のサブジェクト名を 1 行に連結しようとしていると思います (おそらく間違っています)。以下は、これを行う方法の SQL Server の例です。

;WITH Prerequisites AS
(   SELECT  Primary_Subject_Code, Subject_Name
    FROM    SubjectPrerequisite
            INNER JOIN Subjects
                ON Subject_Code = Prerequisite_Subject_Code
)           
SELECT  Subject_Code,
        Subject_Name,
        Subject_Details,
        STUFF(  (   SELECT  ',' + Subject_Name
                    FROM    Prerequisites
                    WHERE   Primary_Subject_Code = Subject_Code
                    FOR XML PATH(''), TYPE
                ).value('.', 'VARCHAR(MAX)'), 1, 1, '') AS PrerequisiteList
FROM    Subjects

XML PATH メソッドがどのように機能するかについては、以前にここで完全に説明しました。ここで指摘された私の答えをさらに改善する

「 SQL Server - ピボット ソリューションの可能性」も参照してください。

于 2012-05-30T14:43:34.460 に答える
0

私はそれを解決したと思います:

 SELECT t.subject_name + 'is a pre-requisite of' + s.subject_name
 FROM subjects s
 INNER JOIN pre_requisites r ON s.subject_code = r.subject_code
 INNER JOIN subjects t ON t.subject_code = r.pre_requisite_code
于 2012-05-30T15:38:13.843 に答える
0

事前前提関係を1レベルの再帰に抽出したいだけの場合は、次のことができます

SELECT
              [original].[subject_code] [OriginalCode]
            , [prereq].[subject_code] [Pre-RequisiteCode]
    FROM
            [subject] [orginal]
        LEFT JOIN
            [SubjectPrerequisite] [spr]
                ON [spr].[Primary_Subject_Code] = [original].[subject_code]
        JOIN
            [subject] [prereq]
                ON [prereq].[subject_code] = [spr].[Prerequisite_Subject_Code]
    ORDER BY
             [OriginalCode]
           , [Pre-RequisiteCode]

再帰チェーンを表示し、何らかの方法でサブジェクトを連結したい場合は、GarethD の答えのような CTE が最適です。ただし、n 層アプリケーションの場合、SQL でそれを行うのは間違っていると思います。

于 2012-05-30T15:09:18.020 に答える