2017-06-11 38 views
-1

我想根据自己的班级和学年 这里展示学生的细节是我用来实现相同的:为什么我的结果,当我做内加入跨产品?

SELECT 
    a1.fk_stu_id, 
    b.stu_fname, 
    c.class_name, 
    d.section_code, 
    e.acad_year 
FROM 
    tbl_stu_class a1 
JOIN 
    tbl_stu_details b 
ON 
    (b.pk_stu_id = a1.fk_stu_id), 
    list_class c 
JOIN 
    tbl_stu_class a2 
ON 
    c.pk_class_id = a2.fk_class_id, 
    list_sections d 
JOIN 
    tbl_stu_class a3 
ON 
    d.pk_section_id = a3.fk_section_id, 
    list_acad_years e 
JOIN 
    tbl_stu_class a4 
ON 
    e.pk_acad_year_id = a4.fk_year_id 
WHERE 
    c.class_name = '10'; 

但这返回学年叉积为每个学生... 这里是上面查询的输出:

fk_stu_id stu_fname class_name section_code acad_year 
     1  sss   10   A    2019 
     2  Second   10   A    2019 
     1  sss   10   A    2017 
     2  Second   10   A    2017 

结果预计:

fk_stu_id stu_fname class_name section_code acad_year 
     1  sss   10   A    2019 
     2  Second   10   B    2017 

有人可以解释为什么是这样吗?我如何解决这个问题? 在此先感谢。

+0

能否请你分享你正在试图获得的结果? – Mureinik

+0

这是什么类型的SQL?我不明白你的JOIN语法与逗号.. –

+0

,因为我必须从不同的表中获取详细信息查询导致这种方式.... –

回答

1
SELECT 
    a.fk_stu_id, 
    b.stu_fname, 
    c.class_name, 
    d.section_code, 
    e.acad_year 
FROM 
    tbl_stu_class a 
JOIN 
    tbl_stu_details b 
ON 
    b.pk_stu_id = a.fk_stu_id 
JOIN 
    list_class c 
ON 
    c.pk_class_id = a.fk_class_id 
JOIN 
    list_sections d 
ON 
    d.pk_section_id = a.fk_section_id 
JOIN 
    list_acad_years e 
ON 
    e.pk_acad_year_id = a.fk_year_id 
WHERE 
    c.class_name = '10'; 
2

这是您的查询重新格式化,看看发生了什么。

SELECT 
    a1.fk_stu_id, 
    b.stu_fname, 
    c.class_name, 
    d.section_code, 
    e.acad_year 
FROM 
    tbl_stu_class a1 JOIN tbl_stu_details b ON (b.pk_stu_id = a1.fk_stu_id) 
, list_class c  JOIN tbl_stu_class a2 ON c.pk_class_id = a2.fk_class_id 
, list_sections d JOIN tbl_stu_class a3 ON d.pk_section_id = a3.fk_section_id 
, list_acad_years e JOIN tbl_stu_class a4 ON e.pk_acad_year_id = a4.fk_year_id 

WHERE 
    c.class_name = '10'; 

你有4个单独的JOIN节,它们之间有逗号。所以你得到这四个部分的交叉产品。

不要使用逗号,使用JOIN的所有表之间。

由于tbl_stu_class是所有部分,class_id可能加入那些部分结合的方式。

但实际上,我认为你不需要这些额外的实例a2 .. a4可言。如果没有看到您的表格模式和数据,就无法分辨出来。

相关问题