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