2016-11-14 52 views
-3

选择多行,责令我有一个Student有几个参数,如ID,姓名等 现在我得到了另外一个表叫ACCOUNTS,他们有一个ID和一个名称...SQL通过ID

这两者之间的关系是OneToMany(一个学生可以有更多的账户)

,我需要一个SQL查询,以示对学生的所有帐户...这里是我有什么,但它不工作...

"Select distinct s from Student s left join fetch s.accounts where s.id=:studId" 

我应该说,Student有一个名为accounts

,并在查询结束领域,我已放置ORDER BY然后将下面的代码不起作用:

s.accounts.id 
account.id 
student.account.id 

所以......长故事短...上面的查询,显示特定学生的帐户...现在我只需要通过帐户的ID命令他们

任何建议?

+0

'从学生的左加入一个账户上,所以你从学生ID匹配账户选择s.id = a.id'? – jarlh

+1

另外,你正在用同名's'来混淆两件事。 – FDavidov

+0

它不起作用... – newbie

回答

1

由于OP确认将其添加为答案。

select distinct s.id, s.name, a.id 
from students s left outer join accounts a on s.id = a.id 
order by s.id, a.id; 
1

一个学生可以有更多的账户

所以这两个表:

  • 学生(ID,姓名,...)
  • 账户(id,student_id,...)

我应该说,学生有一个名为外地账户

这是没有意义的。通过这个,你会存储一个帐户每名学生和几名学生可以共享一个帐户。所以我坚持第一个陈述,即一个学生可以拥有多个账户,这些表格看起来或多或少像我上面显示的那样。

你想查看一个学生的帐户。

select * from accounts where student_id = :studId order by account.id; 

如果你想一同显示学生数据,你会加入表代替:

select * 
from student s 
left join accounts a on a.student_id = s.id 
where s.id = :studId 
order by a.id;