2016-05-04 4 views
0

学生テーブルの生徒IDがコストシェアリングテーブル内に存在しないが、エラーが発生したすべての選択された情報を次のmysqlクエリで選択しました。NOT IN演算子を使用してMySqlで選択の問題?

助けが必要ですか?前もって感謝します!

select st.id as 'Student ID', st.stud_fname as 'First Name', st.stud_lname as 'Last Name', st.stud_middle_name as 'Middle Name', 
dp.dep_name as 'Department',dp.max_dur_year as 'Max Duration', st.entry_year as 'Entry',MAX(sc.acc_year) as 'Current Academic Year', 
sum(sc.Tuition_fee+sc.Accomod_fee+sc.Food_fee) as 'Total Cost Sharing' 

from student st left JOIN student_costsharing sc on st.id = sc.stud_id 
left join department dp on st.dep_id=dp.id 

where st.id not in (SELECT *    
     FROM student_costsharing 
     WHERE sc.stud_id=st.id 
       ) 

GROUP BY st.stud_fname 
order by st.stud_fname 

エラーメッセージ:

1241 - オペランドが1列(複数可)あなたはIN句で列を指定する必要が代わりに*を使用しての

+3

SELECT *をidに変更すると、クローズド・ビューには表示されません。 –

+0

はあなたのために働いていますか? –

+0

その場合は私の答えを受け入れてください... –

答えて

1

これらを試してみると、WHE声明ではありませんRE: -

select st.id as 'Student ID', st.stud_fname as 'First Name', st.stud_lname as 'Last Name', st.stud_middle_name as 'Middle Name', 
dp.dep_name as 'Department',dp.max_dur_year as 'Max Duration', st.entry_year as 'Entry',MAX(sc.acc_year) as 'Current Academic Year', 
sum(sc.Tuition_fee+sc.Accomod_fee+sc.Food_fee) as 'Total Cost Sharing' 

from student st left JOIN student_costsharing sc on st.id = sc.stud_id 
left join department dp on st.dep_id=dp.id 

where st.id not in (SELECT stud_id    
     FROM student_costsharing 
     WHERE sc.stud_id=st.id 
       ) 

GROUP BY st.stud_fname 
order by st.stud_fname 
+0

私はそれを受け入れてから、私に投票してください。 –

2

が含まれている必要があり

where st.id not in (SELECT stud_id    
     FROM student_costsharing 
     WHERE sc.stud_id=st.id 
       ) 
1

問題は、テーブルの結果セット全体でwhere句のオペランドを比較カント以来、サブクエリの結果セットには、1列のみを含めるべきであること、です。 IDと比較する列はどれですか?

これを解決するには、値を比較する表の1つの列を選択する必要があります。

+0

非常に参考になりました。ありがとう。 –