2017-06-10 73 views
0

我想從給定學年和班級的不同表中獲得學生的詳細信息。我用 查詢:爲什麼我在'on clause'錯誤中得到未知列'list_class.pk_class_id'?

SELECT 
    list_acad_years.acad_year, 
    a.fk_stu_id, 
    tbl_stu_details.stu_fname, 
    tbl_stu_details.stu_sname, 
    a.fk_section_id, 
    b.fk_class_id, 
    list_class.class_name, 
    list_sections.section_code 
FROM 
    tbl_stu_details, 
    list_class, 
    list_sections, 
    list_acad_years 
INNER JOIN 
    tbl_stu_class AS a 
ON 
    (
    list_acad_years.pk_acad_year_id = a.fk_year_id 
) 
INNER JOIN 
    tbl_stu_class AS b 
ON 
    (list_class.pk_class_id = b.fk_class_id) 
WHERE 
    (
    list_acad_years.acad_year = '2019' 
) AND(list_class.class_name = '10') 

它顯示了以下錯誤:

#1054 - Unknown column 'list_class.pk_class_id' in 'on clause' 

我的表中的列是:

tbl_stu_class:

pk_stu_cls_id`, `fk_stu_id`, `fk_year_id`, `fk_class_id`, `fk_section_id`, `current_yr` 

list_class :

`pk_class_id`, `class_name`, `class_code`, `fk_user_id` 

list_sections:

pk_section_id`, `section_code`, `section_description`, `fk_user_id` 

list_acad_years:

`pk_acad_year_id`, `acad_year`, `acad_year_code`, `fk_user_id` 

tbl_stu_details:

`pk_stu_id`, `stu_id`, `username`, `stu_fname`, `stu_mname`, `stu_sname` 

list_sections:

`pk_section_id`, `section_code`, `section_description`, `fk_user_id` 

爲什麼它說未知列時列存在? 這將是很大的幫助,如果你能幫助我使這個查詢更好... 在此先感謝。

+0

您確定這是生成錯誤的確切查詢嗎? –

+0

*從不*在'FROM'子句中使用逗號。 *總是*使用正確的,明確的'JOIN'語法。 –

+0

是的,我剛剛從我的編輯器中複製了查詢,這個查詢生成了提到的錯誤 –

回答

0

如果您使用多個FROM表,您的內連接將始終連接到from語句中的最後一個表。
我剛剛改變了INNER JOIN的位置

試試這個讓我知道它是否有效。

SELECT 
    list_acad_years.acad_year, 
    a.fk_stu_id, 
    tbl_stu_details.stu_fname, 
    tbl_stu_details.stu_sname, 
    a.fk_section_id, 
    b.fk_class_id, 
    list_class.class_name, 
    list_sections.section_code 
FROM 
    tbl_stu_details, 
    list_class INNER JOIN 
    tbl_stu_class AS b 
ON 
    (list_class.pk_class_id = b.fk_class_id), 
    list_sections, 
    list_acad_years 
INNER JOIN 
    tbl_stu_class AS a 
ON 
    (
    list_acad_years.pk_acad_year_id = a.fk_year_id 
) 
WHERE 
    (
    list_acad_years.acad_year = '2019' 
) AND(list_class.class_name = '10') 
+0

是這工作(y)謝謝 –

+0

如果這個答案是userfull你可以標記爲接受這個答案 – Santosh

+0

你可以接受任何你喜歡的答案。任何在FROM子句中都有逗號的代碼只是一個糟糕的SQL例子。 –

1

你的問題是你正在使用舊式的連接。期。更糟糕的是,你將它們與新式連接相結合。

通過逗號不能理解表的名稱。這限制了定義的範圍。

您似乎知道如何正確書寫JOIN。所以,只需修復FROM條款,你的代碼應該可以工作。

+0

感謝信息..... –

相關問題