cascading Input Control sql query return error: "ORA-01427: single-row subquery returns more than one row"

cascading Input Control sql query return error: "ORA-01427: single-row subquery returns more than one row"

正在寻找有关我的 sql 查询的解决方案 error.I 正在尝试在 JaspersoftServer 中创建第二个级联输入控件。第一个输入控制工作正常,但是当我尝试创建第二个级联 IC 时,它 returns 出现错误。我有 3 个 tables(用户、客户端、user_client),多对多,所以在 them.The 第一个输入控件(客户端)- 效果很好,最终用户将 select 客户端,客户端可以有很多用户,所以级联是关键。另外,作为输出,我想得到的不是 user_id,而是用户的名字和姓氏作为一个列字段。这就是我被困的地方。我很确定这是简单的语法错误,但花了好几个小时才弄清楚它出了什么问题。有没有人可以看看它并指出我的查询中的问题在哪里?!到目前为止我已经完成了:

select distinct 
u.user_id,(
SELECT CONCAT(first_name, surname) AS user_name from tbl_user ),
c.client_id
FROM tbl_user u
left join tbl_user_client uc
on uc.user_id = u.user_id
left join tbl_client c
on c.client_id = uc.client_id
where c.client_id = uc.client_id
order by c.client_id

提前谢谢你。 P.S。 JasperServer + Oracle 11g

您正在执行不相关的子查询以从用户 table 获取 first/last 名称。该子查询之间没有关系:

SELECT CONCAT(first_name, surname) AS user_name from tbl_user

...和主查询中的用户 ID,因此子查询将尝试 return every first/last 所有用户的名称,对于您的联接找到的每一行。

您根本不需要执行子查询,因为您已经有了 tbl_user 可用的信息:

select u.user_id,
  CONCAT(u.first_name, u.surname) AS user_name
  c.client_id
FROM tbl_user u
left join tbl_user_client uc
on uc.user_id = u.user_id
left join tbl_client c
on c.client_id = uc.client_id
where c.client_id = uc.client_id
order by c.client_id

如果你想在名字和姓氏之间放置 space,你要么需要嵌套的 concat() 调用,因为 that function only takes two arguments:

select u.user_id,
  CONCAT(u.first_name, CONCAT(' ', u.surname)) AS user_name
...

... 或者使用 the concatenation operator 更易读:

select u.user_id,
  u.first_name ||' '|| u.surname AS user_name
...

如果第一个控件选择了一个客户端并且该查询应该查找与该客户端相关的用户,那么您加入 table 的方式是错误的,不是吗?而且您没有在选定的客户端上进行过滤 - 但不知道 Jasper 中实际是如何实现的。也许您确实想要整个列表并将在 Jasper 端对其进行过滤。