-2

我的数据库中有一些表,我想使用 join 将它们组合起来,但我遇到了问题。让我说清楚。我已将Id_num(列名)指定为表中的主键,Stu_info其他表有一个Id_num列来存储 ID 号。

所有表都具有Id_num将存储 ID 号的列的相同名称 ( )。我试图创建一个视图来连接表以从特定表中获取特定数据。如果我使用INNER JOIN,那么由于一些空值,它不会显示任何行。但是我用过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有一个数据,表Tui_fee的列Tuition_fee有六个数据,用于具有以下 ID 的学生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的列Development_fee有一个条目LAB1016111710000&表Tui_fee的列Tuition_fee有六个条目LAB101611171000, 1000, 1000, 1000, 1000, 1000。但它不像上面的信息那样显示。当我执行以下代码以显示该 ID 的数据时

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

这是不对的!这意味着要与Tuition_fee有六行的表匹配,它已经Development_fee再次生成了相同的表值(六次),尽管Development_fee表对于具有以下 ID 的人只有一行LAB10161117

我只想准确地显示表中存在的行,并且我想停止行重复。你能帮我解决这个问题吗?请帮助我摆脱这个问题。谢谢你。

4

1 回答 1

0

您应该考虑使用 UNION 而不是 JOIN。

简化您的查询,联合可能如下所示

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 回答