我正在编写以下代码:
select row_to_json(t)
from (
select json_agg(A) from (
select DISCIPLINE.D_ID,DISCIPLINE.D_NAME AS Discipline_Name,
(
select json_agg(B) from
(
select CATEGORY.C_ID,CATEGORY.C_NAME,
(
select json_agg(C) from
(
select SUB_CATEGORY.SC_ID,SUB_CATEGORY.SC_NAME
from SUB_CATEGORY
WHERE SUB_CATEGORY .C_ID=CATEGORY.C_ID
)C
)
from CATEGORY
WHERE CATEGORY.D_ID=DISCIPLINE.D_ID
)B
)
from DISCIPLINE
)A
)t
我收到此错误:
错误:用作查询的子查询返回的一行以上
该如何解决?
答案 0 :(得分:0)
可能是内部子查询返回的行多,因此如果需要,应添加限制1
select SUB_CATEGORY.SC_ID,SUB_CATEGORY.SC_NAME
from SUB_CATEGORY
WHERE SUB_CATEGORY .C_ID=CATEGORY.C_ID
LIMIT 1
如此
select row_to_json(t)
from (
select json_agg(A) from (
select DISCIPLINE.D_ID,DISCIPLINE.D_NAME AS Discipline_Name, (
select json_agg(B) from (
select CATEGORY.C_ID,CATEGORY.C_NAME, (
select json_agg(C) from (
select SUB_CATEGORY.SC_ID,SUB_CATEGORY.SC_NAME
from SUB_CATEGORY
WHERE SUB_CATEGORY .C_ID=CATEGORY.C_ID
LIMIT 1
) C
) from CATEGORY WHERE CATEGORY.D_ID=DISCIPLINE.D_ID
) B
) from DISCIPLINE
) A
) t
答案 1 :(得分:0)
在不知道您的数据的情况下,我猜想您的WHERE a = b
子句之一就是问题所在。
如果您正在将一个值与另一个值进行=
比较,则必须确保在那里确实只有一个要比较的值。因此,在这种情况下,您必须确保WHERE SUB_CATEGORY .C_ID=CATEGORY.C_ID
或WHERE CATEGORY.D_ID=DISCIPLINE.D_ID
中的第二项确实是一个值。否则,等于比较不知道应该与哪个值进行比较。
如果有多个值:
如果不应该查找错误
LIMIT 1
是否应该是每次的第一个ID(它们的顺序?否则可能是非常随机的)
使用另一个比较运算符,例如。 G。 IN
比较器