Ошибка MySQL: подзапрос возвращает более одной строки - PullRequest
0 голосов
/ 16 марта 2011

В моем запросе я выбираю три столбца (скажем, A, B и Summary)

Резюме основано на B и A.

Мне нужно использовать подзапрос, чтобы получить сводку на основе A и B.

Проблема:

Для одного значения A (скажем, A1) и одного значения B (например, B1) я получаю два значения Summary (например, Summ1 и Summ2) в одном столбце.

Следовательно, это дает ошибку:

 Subquery returns more than one row 

Вместо этого я хочу показать это, как показано ниже в моей таблице:

 A1     B1     Summ1
 A1     B1     Summ2  

Как я могу это сделать?

ЗАПРОС:

SELECT a.FundIDRecv,a.SubscribeDt, b.FundName, 
(
   SELECT c.PricePerWeek
   FROM tbl_Hive c
   WHERE c.FundID IN 
   (
      SELECT FundID from tbl_FundStatic 
      WHERE FundID IN
      (
          SELECT FundIDSend
          FROM tbl_FundSubscriptions 
          WHERE FundIDRecv = a.FundIDRecv

      )
      AND UserID = '14'
   )
) as Price
FROM tbl_FundSubscriptions a, tbl_Hive b
WHERE a.FundIDRecv = b.FundID

AND a.FundIDRecv
IN (

SELECT FundIDRecv
FROM tbl_FundSubscriptions
WHERE FundIDSend
IN (

SELECT FundID
FROM tbl_FundStatic 
WHERE UserID = '14'
)
)
Group by a.FundIDRecv

Оператор SELECT для c.PricePerWeek генерирует эту ошибку

Ответы [ 4 ]

1 голос
/ 16 марта 2011

Вам не нужно использовать подзапрос для суммирования столбцов A и B.

, просто попробуйте

SELECT A,B,(A+B) as 'sum'
FROM table

Отправьте запрос, чтобы помочь вам больше.

ОБНОВЛЕНИЕ

в вашем запросе это нормально, что в результате подзапроса возвращают более одной строки, возможно, вы хотели сделать это так: SUM(c.PricePerWeek)

SELECT a.FundIDRecv,a.SubscribeDt, b.FundName, 
(
   SELECT SUM(c.PricePerWeek)
   FROM tbl_Hive c
   WHERE c.FundID IN 
   (
      SELECT FundID from tbl_FundStatic 
      WHERE FundID IN
      (
          SELECT FundIDSend
          FROM tbl_FundSubscriptions 
          WHERE FundIDRecv = a.FundIDRecv

      )
      AND UserID = '14'
   )
) as Price
....
0 голосов
/ 16 марта 2011

В принципе, я вижу это так:

SELECT
  a.FundIDRecv,
  a.SubscribeDt,
  b.FundName,
  b.PricePerWeek as Price
FROM tbl_FundSubscriptions a, tbl_Hive b
WHERE a.FundIDRecv = b.FundID
  AND a.FundIDRecv IN (
    SELECT FundIDRecv
    FROM tbl_FundSubscriptions
    WHERE FundIDSend IN (
      SELECT FundID
      FROM tbl_FundStatic 
      WHERE UserID = '14'
    )
  )
Group by a.FundIDRecv, b.PricePerWeek

Синтаксис старомодного соединения, который я, вероятно, заменил бы на текущий стандартный Также, кажется, есть один избыточный выбор IN.

Так что в конечном итоге скрипт может выглядеть так:

SELECT
  a.FundIDRecv,
  a.SubscribeDt,
  b.FundName,
  b.PricePerWeek as Price
FROM tbl_FundSubscriptions a
  INNER JOIN tbl_Hive b ON a.FundIDRecv = b.FundID
WHERE a.FundIDSend IN (
  SELECT FundID
  FROM tbl_FundStatic 
  WHERE UserID = '14'
)
Group by a.FundIDRecv, b.PricePerWeek
0 голосов
/ 16 марта 2011

Оставьте свой подзапрос в предложении from и попробуйте ....

Попробуйте это ...

 SELECT a.FundIDRecv,a.SubscribeDt, b.FundName, d.price

FROM tbl_FundSubscriptions a, tbl_Hive b,
(  

  SELECT c.PricePerWeek as Price   FROM tbl_Hive c   
   WHERE c.FundID IN  
   (  
      SELECT FundID from tbl_FundStatic
       WHERE FundID IN     
        (
             SELECT FundIDSend
             FROM tbl_FundSubscriptions ,tbl_FundSubscriptions a 
             WHERE FundIDRecv = a.FundIDRecv
        )
        AND UserID = '14' 
 )

 ) d


 WHERE a.FundIDRecv = b.FundID 
 AND a.FundIDRecv IN ( 
 SELECT FundIDRecv FROM   tbl_FundSubscriptions
 WHERE FundIDSend IN 
 (
      SELECT FundID 
      FROM tbl_FundStatic
      WHERE UserID = '14' 
 )
 )
 Group by a.FundIDRecv 
0 голосов
/ 16 марта 2011

Похоже, вам нужно реструктурировать его как JOIN, а не как подзапрос.

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