相同的字段名称导致系统出错

Identical field names causing error in system

问题本身将被更新,直到错误被清除。

几个月前,我们最近对系统进行了升级,从 JBoss 升级到 Wildfly,从那以后我们的系统就出问题了。

假设我有以下 tables

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每个字段

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

我仍然遇到错误,所以我决定 select 每个 table

的 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

这个查询有效,所以很明显,只要 table 上有相同的字段名称,系统就会抛出错误。

这是什么问题,我该如何解决这个问题?我应该从哪里开始寻找?任何 link 帮助我指明正确方向的人都会很棒!

error
----

WFLYEJB0443: EJB 3.1 FR 13.3.3: BMT bean SqlSearchExecutionSessionBean should complete transaction before returning.

正如我之前所说,这是一个普遍错误,有时我也会在拼错 table 名称或字段名称时遇到此错误!

如果您在不同的 table 中遇到相同字段的错误,我强烈建议您尝试以这种方式放置它们,而不是给 table 一个别名:

select Students.id,ClassStudent.id
from Students
join ClassStudent on ClassStudent.id = Student.classid

您的查询结果不能有相同的列名。 所以列名 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,因为它在您的连接语句中。但是,如果您在查询中确实需要它,您可以给它一个像这样的别名 cs.id AS csid(或其他一些未使用的名称)并将其添加到您的 SELECT 语句中。