Postgresql ОШИБКА: более одной строки, возвращенной подзапросом, используемым в качестве выражения - PullRequest
0 голосов
/ 15 сентября 2018

Я пишу этот код:

 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  

Я получаю эту ошибку:

ОШИБКА: более одной строки, возвращенной подзапросом, используемым в качестве выражения

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Не зная ваших данных, я бы предположил, что одно из ваших WHERE a = b условий является проблемой.

Если вы проводите сравнение значения = с другим, вы должны убедиться, что у вас действительно есть только одно значение для сравнения. Таким образом, в этом случае вы должны убедиться, что в WHERE SUB_CATEGORY .C_ID=CATEGORY.C_ID или в WHERE CATEGORY.D_ID=DISCIPLINE.D_ID второй член действительно является одним значением. В противном случае сравнение с равными не знает, какое значение следует взять для сравнения.

Если существует более одного значения:

  • Найдите ошибку, если это не должно быть

  • LIMIT 1 если это будет первый идентификатор каждый раз (они заказаны? В противном случае это может быть очень случайным)

  • Используйте другой оператор сравнения, e. г. IN компаратор

0 голосов
/ 15 сентября 2018

может означать, что ваш внутренний подзапрос возвращает больше строки, поэтому вам нужно добавить предел 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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...