问题本身将一直更新,直到错误消除。
几个月前,我们最近对系统进行了升级,从JBoss升级到Wildfly,此后我们的系统就出现了故障。
让我们说以下表格
CREATE TABLE students(
ID int,
Classid int,
Name varchar(50),
Version int
)
CREATE TABLE classstudent(
ID int,
Classname varchar(50),
Version int
)
我编写了以下查询,并且有效
select *
from students
我写了以下内容,但没有用
select *
from students s
join classStudent cs on cs.id = s.classid
所以我决定选择每个字段
select s.id,s.classid,c.name,s.version,cs.id,cs.classname,cs.version
from students s
join classStudent cs on cs.id = s.classid
我仍然遇到错误,所以我决定从每个表中选择2个ID
select s.id,cs.id
from students s
join classStudent cs on cs.id = s.classid
我又一次遇到错误,但后来我将ID重命名为其他名称
select s.id as sid,cs.id as csid
from students s
join classStudent cs on cs.id = s.classid
此查询有效,因此很明显每当两个表上的字段名称相同时,系统都会引发错误。
这是什么问题,我该如何解决?我应该从哪里开始寻找?任何帮助指向正确方向的链接都将非常有用!
error
----
WFLYEJB0443: EJB 3.1 FR 13.3.3: BMT bean SqlSearchExecutionSessionBean should complete transaction before returning.
但是正如我之前所说,这是一个普遍错误,当我拼写错误的表名或字段名时,有时也会得到它!
答案 0 :(得分:1)
查询结果的列名不能相同。
因此列名id
在SELECT语句中只能存在一次。
因此,我将尝试以下操作:
select s.id, s.classid, c.name, s.version, cs.classname, cs.version
from Students s
join ClassStudent cs on cs.id = s.classid
在这里,您不必提及cs.id
,因为它始终等于s.id
,就像您在join语句中一样。但是,如果您确实希望在查询中使用它,则可以给它一个别名cs.id AS csid
(或其他一些未使用的名称),并将其添加到SELECT语句中。
答案 1 :(得分:0)
我强烈建议您在不同表中的同一字段出现错误时,尝试以这种方式放置它们,而不是给表取别名:
select Students.id,ClassStudent.id
from Students
join ClassStudent on ClassStudent.id = Student.classid