MySQL подзапрос возвращает более одной строки - PullRequest
17 голосов
/ 22 апреля 2009

Я выполняю этот запрос:

SELECT
    voterfile_county.Name,
    voterfile_precienct.PREC_ID,
    voterfile_precienct.Name,
    COUNT((SELECT voterfile_voter.ID
FROM voterfile_voter
JOIN voterfile_household
WHERE voterfile_voter.House_ID = voterfile_household.ID
AND voterfile_household.Precnum = voterfile_precienct.PREC_ID)) AS Voters
FROM voterfile_precienct JOIN voterfile_county
WHERE voterfile_precienct.County_ID = voterfile_County.ID;

Я пытаюсь заставить его вернуть что-то вроде этого:

County_Name   Prec_ID   Prec_Name   Voters(Count of # of voters in that precienct)

Однако я получаю сообщение об ошибке:

# 1242 - Подзапрос возвращает более 1 строки.

Я попытался поместить оператор COUNT в подзапрос, но получаю неверную синтаксическую ошибку.

Ответы [ 4 ]

59 голосов
/ 06 августа 2010

Если вы получили ошибку: ошибка № 1242 Подзапрос возвращает более одной строки, попробуйте поставить ЛЮБОЙ перед вашим подзапросом. Например:

Ошибка возврата этого запроса:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

Это хороший запрос:

SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);
13 голосов
/ 22 апреля 2009

Вы можете попробовать это без подзапроса, с простой группой:

SELECT voterfile_county.Name, 
  voterfile_precienct.PREC_ID, 
  voterfile_precienct.Name, 
  count(voterfile_voter.ID)
FROM voterfile_county
JOIN voterfile_precienct 
  ON voterfile_precienct.County_ID = voterfile_County.ID
JOIN voterfile_household 
  ON voterfile_household.Precnum = voterfile_precienct.PREC_ID
JOIN voterfile_voter 
  ON voterfile_voter.House_ID = voterfile_household.ID 
GROUP BY voterfile_county.Name, 
  voterfile_precienct.PREC_ID, 
  voterfile_precienct.Name

Когда вы используете GROUP BY, любой столбец, по которому вы не группируете, должен иметь предложение агрегирования (например, SUM или COUNT.) Так что в этом случае вы должны группировать по округу name, precienct.id и precient.name. 1004 *

3 голосов
/ 18 мая 2011

См. Пример ниже и измените ваш запрос соответственно.

select COUNT(ResultTPLAlias.id) from 
(select id from Table_name where .... ) ResultTPLAlias;
3 голосов
/ 22 апреля 2009

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

SELECT
voterfile_county.Name, voterfile_precienct.PREC_ID, 
voterfile_precienct.Name,
    (SELECT COUNT(voterfile_voter.ID) 
    FROM voterfile_voter JOIN voterfile_household
    WHERE voterfile_voter.House_ID = voterfile_household.ID
      AND voterfile_household.Precnum = voterfile_precienct.PREC_ID) as Voters
FROM voterfile_precienct JOIN voterfile_county 
ON voterfile_precienct.County_ID = voterfile_County.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...