我得到的子查询在MySQL中返回超过一行错误。
SELECT variable.libelle_variable,
donnee.statistique,
(SELECT SUM(do.statistique)
FROM `donnee` as do , `quartier`, `type_donnee`, `variable`, `donnee`, `associer`
WHERE
(type_donnee.libelle_type_donnee = "Activités commerciales"
AND associer.code_quartier = quartier.code_quartier
AND associer.id_donnee = donnee.id_donnee
AND associer.id_variable = variable.id_variable
AND associer.id_type_donnee = type_donnee.id_type_donnee
AND do.id_donnee = associer.id_donnee
)
GROUP BY variable.libelle_variable
)
FROM
`quartier`,
`type_donnee`,
`variable`,
`donnee`,
`associer`
WHERE
type_donnee.libelle_type_donnee = "Activités commerciales"
AND
quartier.nom_quartier = "Hôpitaux-facultés"
AND
associer.code_quartier = quartier.code_quartier
AND
associer.id_donnee = donnee.id_donnee
AND
associer.id_variable = variable.id_variable
AND
associer.id_type_donnee = type_donnee.id_type_donnee
GROUP BY
variable.libelle_variable
问题是,当我单独测试子查询时,它只返回一行。
最佳答案
问题出在select
子查询中。
根据您的问题,您不需要在select
上使用子查询
避免使用CROSS JOIN
。
您可以使用inner join
而不是CROSS JOIN
。
SELECT variable.libelle_variable,
donnee.statistique,
SUM(do.statistique)
FROM
`associer`
INNER JOIN `quartier` ON associer.code_quartier = quartier.code_quartier
INNER JOIN `type_donnee` ON associer.id_type_donnee = type_donnee.id_type_donnee
INNER JOIN `variable` ON associer.id_variable = variable.id_variable
INNER JOIN `donnee` ON associer.id_donnee = donnee.id_donnee
WHERE
type_donnee.libelle_type_donnee = "Activités commerciales"
AND
quartier.nom_quartier = "Hôpitaux-facultés"
GROUP BY variable.libelle_variable,donnee.statistique
编辑
你可以试试这个。
SELECT
variable.libelle_variable,
donnee.statistique,
(
SELECT SUM(do.statistique)
FROM `donnee` as do ,
`quartier`,
`type_donnee`,
`variable` AS T1,
`donnee`,
`associer`
WHERE
(
type_donnee.libelle_type_donnee = "Activités commerciales"
AND associer.code_quartier = quartier.code_quartier
AND associer.id_donnee = donnee.id_donnee
AND associer.id_variable = T1.id_variable
AND associer.id_type_donnee = type_donnee.id_type_donnee
AND do.id_donnee = associer.id_donnee
AND T1.libelle_variable = variable.libelle_variable
)
)
FROM
`associer`
INNER JOIN `quartier` ON associer.code_quartier = quartier.code_quartier
INNER JOIN `type_donnee` ON associer.id_type_donnee = type_donnee.id_type_donnee
INNER JOIN `variable` ON associer.id_variable = variable.id_variable
INNER JOIN `donnee` ON associer.id_donnee = donnee.id_donnee
WHERE
type_donnee.libelle_type_donnee = "Activités commerciales"
AND
quartier.nom_quartier = "Hôpitaux-facultés"
GROUP BY
variable.libelle_variable,
donnee.statistique
关于mysql - 如何解决“子查询返回多于1行”的错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49418810/