-2

データベースにいくつかのテーブルがあり、結合を使用してそれらを結合したいのですが、問題があります。はっきりさせておきます。Id_num(列名) をテーブルの主キーとして割り当てましStu_infoた。他のテーブルにはId_numID 番号を格納する列があります。

すべてのテーブルにはId_num、ID 番号を格納する列の同じ名前 ( ) があります。特定のテーブルから特定のデータを取得するためにテーブルを接続するビューを作成しようとしました。私が使用するINNER JOINと、いくつかの null 値のために行が表示されません。しかし、私はLEFT OUTER JOINそれが働いています。しかし、それは受け入れがたい問題を引き起こします。

コード :

SELECT     
    dbo.Stu_info.Id_num, dbo.Development_fee.Dvf, dbo.Stu_info.Stu_name, 
    dbo.Stu_info.Dep_name, dbo.Tuition_fee.Acy, dbo.Tuition_fee.Tui_fee, 
    dbo.Registration_fee.Reg_fee, dbo.Form_fill_up_fee.Acy AS Expr1, 
    dbo.Form_fill_up_fee.FFF, dbo.Examination_fee.E_typ, dbo.Examination_fee.Exm_fee, 
    dbo.monthly_instal.Instm, dbo.monthly_instal.Paid
FROM
    dbo.Stu_info 
LEFT OUTER JOIN
    dbo.Tuition_fee ON dbo.Stu_info.Id_num = dbo.Tuition_fee.Id_num 
LEFT OUTER JOIN
    dbo.Registration_fee ON dbo.Stu_info.Id_num = dbo.Registration_fee.Id_num 
LEFT OUTER JOIN
    dbo.Examination_fee ON dbo.Stu_info.Id_num = dbo.Examination_fee.Id_num 
LEFT OUTER JOIN
    dbo.monthly_instal ON dbo.Stu_info.Id_num = dbo.monthly_instal.Id_num 
LEFT OUTER JOIN
    dbo.Development_fee ON dbo.Stu_info.Id_num = dbo.Development_fee.Id_num 
LEFT OUTER JOIN
    dbo.Form_fill_up_fee ON dbo.Stu_info.Id_num = dbo.Form_fill_up_fee.Id_num

たとえば、テーブルDvfの列にDevelopment_feeは 1 つのデータがあり、テーブルTui_feeの列にTuition_feeは次の ID を持つ学生の 6 つのデータがありますLAB10161117

次のコードを使用しようとすると

Select * from View_1
Where Id_num = 'LAB10161117' 

次の ID LAB10161117 のデータを取得するには、次の情報を取得するとします。お気に入り

ID number : LAB10161117
-----------------------------------------
Development Fee  ---- Tuition Fee ---- Other columns
10000            ----  1000
Null             ----  1000
Null             ----  1000
Null             ----  1000
Null             ----  1000
Null             ----  1000

テーブルDvfの列には が 1 つのエントリがあり、テーブルの列には が 6 つのエントリがあるためです。しかし、上記のような情報は表示されません。次のコードを実行してそのIDのデータを表示するとDevelopment_feeLAB1016111710000Tui_feeTuition_feeLAB101611171000, 1000, 1000, 1000, 1000, 1000

Select * from View_1
Where Id_num = 'LAB10161117' 

その後、次のような間違った情報が表示されます

ID number : LAB10161117
-----------------------------------------
Development Fee  ---- Tuition Fee ---- Other columns

10000            ----  1000
10000        ----  1000
10000       ----  1000
10000        ----  1000
10000       ----  1000
10000       ----  1000

これは正しくありません!これは、次の ID を持つ人に対してテーブルが 1 行しかないにもかかわらず、テーブルTuition_feeの同じ値がDevelopment_fee何度も (6 回)生成された 6 行のテーブルと一致することを意味します。Development_feeLAB10161117

テーブルに存在するものを正確に行に表示したいだけで、行の重複を止めたいのです。この問題を解決するのを手伝ってくれませんか? この問題を解決するのを手伝ってください。ありがとうございました。

4

1 に答える 1

0

JOIN ではなく UNION を使用することを検討する必要があります。

クエリを単純化すると、ユニオンは次のようになります

SELECT           dbo.Stu_info.Id_num, dbo.Development_fee.Dvf
FROM             dbo.Stu_info 
LEFT OUTER JOIN  dbo.Tuition_fee ON dbo.Stu_info.Id_num = dbo.Tuition_fee.Id_num 
UNION
SELECT           dbo.Stu_info.Id_num, dbo.Registration_fee.Reg_fee
FROM             dbo.Stu_info 
LEFT OUTER JOIN  dbo.Registration_fee ON dbo.Stu_info.Id_num = dbo.Registration_fee.Id_num 
于 2012-08-04T12:36:50.167 に答える