MySQL подзапрос возвращает более 1 строки - PullRequest
2 голосов
/ 21 сентября 2011

У меня следующий запрос:

(select xyz.* from 
      (select xt.image, p.*, pc.categoryid, c.category, 
          (select value from xcart_extra_field_values 
             where efv.productid=p.productid and efv.fieldid = 2) as Type,
          (select value from xcart_extra_field_values 
             where efv.productid=p.productid and efv.fieldid = 1) as Zone 
       FROM xcart_products p 
       inner join xcart_products_categories pc 
         on p.productid=pc.productid 
       inner join xcart_categories c 
         on pc.categoryid=c.categoryid 
       inner join xcart_extra_field_values efv 
         on p.productid=efv.productid 
       inner join xcart_images_T xt 
         on p.productid=xt.id) xyz 
       where categoryid='1' and Type='2' and Zone='1' 
       group by productid)

Но когда я выполняю этот запрос в phpmyadmin, он отображает сообщение об ошибке:

#1242 - Subquery returns more than 1 row

Что не так в запросе. Пожалуйста, помогите.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Я думаю (частично) проблема в том, что вы повторно используете псевдоним в неправильном месте.
Вы должны использовать псевдоним один раз и не смешивать их для разных экземпляров одной и той же таблицы.

(select xyz.* from 
  (select xt.image, p.*, pc.categoryid, c.category, 
      (select value from xcart_extra_field_values efv2 
         where efv2.productid=p.productid and efv2.fieldid = 2) as Type,
      (select value from xcart_extra_field_values efv3
         where efv3.productid=p.productid and efv3.fieldid = 1) as Zone 
   FROM xcart_products p 
   inner join xcart_products_categories pc 
     on p.productid=pc.productid 
   inner join xcart_categories c 
     on pc.categoryid=c.categoryid 
   inner join xcart_extra_field_values efv1 
     on p.productid=efv1.productid 
   inner join xcart_images_T xt 
     on p.productid=xt.id) xyz 
   where categoryid='1' and Type='2' and Zone='1' 
   group by productid)

Так что используйте уникальный псевдоним efvx для каждого xcart_extra_field_values экземпляра таблицы.

0 голосов
/ 21 сентября 2011

Выполните каждый подзапрос вручную в phpmyadmin и посмотрите, какой из них возвращает более одной строки, и у вас есть свой ответ.Другой вариант - добавить ограничение 1 в каждый подзапрос, чтобы убедиться, что возвращается только одна строка.Конечно, лучше поискать ошибку и решить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...