Подтвердить что ты не робот

Подзапрос MySQL возвращает более одной строки

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

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 в подзапросе, но я получил недопустимую синтаксическую ошибку.

4b9b3361

Ответ 1

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

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, любой столбец, который вы не группируете, должен иметь предложение aggregate (fe SUM или COUNT.) Таким образом, в этом случае вам нужно группировать имя графства, precienct.id и precient.name.

Ответ 2

Если вы получите ошибку: ошибка no 1242 Подзапрос возвращает более одной строки, попробуйте поставить ANY перед вашим подзапросом. Например:

Эта ошибка возврата запроса:

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

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

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

Ответ 3

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

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

Ответ 4

См. приведенный ниже пример и соответствующим образом измените свой запрос.

select COUNT(ResultTPLAlias.id) from 
(select id from Table_name where .... ) ResultTPLAlias;