我有3个表result ,person and person_detail
:
结果有4列
id, teacher (fk from person) , student(fk from person), percent
人有很多专栏
id, address....etc.
person_detail有3列
id, name, person(fk for person)
我想要的结果如下:
teacher.name, student.name, percent
为此我尝试了这个查询:
select
(select pd.name from Person_detail pd where pd.person=r.teacher) as Madam,
(select pd.name from Person_detail pd where pd.person=r.student) as Student,
and r.percent from Result r;
但是这会让我异常,因为子查询返回的行数超过1行,而我的一些朋友查询浏览器结果就是消息“ok”。
请有人能为我提供解决方案吗?
提前致谢,
答案 0 :(得分:2)
您的子查询必须返回唯一的行,在您的查询中,此select pd.name from Person_detail pd where pd.person=r.teacher
或此select pd.name from Person_detail pd where pd.person=r.student
会返回多行。
因此,如果结果多行,您将获得上述错误。如果您想获得独特的结果,那么改善您的位置条件或使用Top(1)获得唯一的行(不推荐)。
您可以在不使用This
等子查询的情况下编写上述查询答案 1 :(得分:2)
你需要在结果和person_details的两个实例之间使用join(一个用于学生,一个用于教师):
char *a = nullptr;
printf("%s", (a == nullptr) ? "NULL" : a);