2012-07-18 116 views
0

我有一个关于MySQL的问题。#1242:子查询返回不止一行

我有一个像coursepapersstudents几张桌子,studentspapers

现在我想的是,我的查询应返回结果,如:

应该选择学生的名字,学生桌学生类别,学生可选的论文,但我没有在我的学生论文表中提到任何东西,但在论文表中。

论文表有id作为我在studentspaper为外键使用了主键。

现在我使用的是简单的查询是:

select 
    st.name, 
    s.paperid 
from 
    students st, 
    sps s join papers 
    on paperid 
where 
    paperid = (select p.p_id from papers p where type='optional') 
    and st.course=1 

我不知道我该怎么办。

它说子查询返回多于1列#1242

回答

0

您所查询的是:

select st.name, s.paperid 
from students st, 
    sps s join 
    papers 
    on paperid 
where paperid= (select p.p_id from papers p where type='optional') and st.course=1 

它缺少学生和SP之间的联接。我认为你的意思是:

select st.name, s.paperid 
from students st join 
    sps s 
    on st.studentid = sps.studentid join 
    papers p 
    on p.paperid = sps.paperid 
where p.type='optional' and st.course=1 

但是,没有看到表格的结构,很难说这是否是正确的查询。

+0

非常感谢。真的,你做了我的一天。 – 2012-07-18 19:02:02

4

在这种情况下,你必须改变你的SQL来......这:

select st.name, s.paperid 
from students st, sps s join papers on paperid 
where paperid in (select p.p_id from papers p where type='optional') and st.course=1 

我刚换了“=”到“内” 。

这应该解决您的问题。

+0

这个环节应该是在这里:MySQL的比较操作符(http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#function_in) – Timur 2012-07-18 17:49:32

+1

这个答案是正确的。如果这个答案帮助你,请接受它。 – danilodeveloper 2012-07-18 18:05:41

+0

我没有工作 – 2012-07-18 18:07:42

相关问题