Reputation: 55
I'm getting the Subquery returns more than 1 row error in 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
The problem is that my Subquery returns only one row when I test it alone.
Upvotes: 1
Views: 523
Reputation: 46219
The problem is in the select
subquery.
From your question you don't need to use subquery on select
Avoid use CROSS JOIN
.
You can use inner join
instead of 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
EDIT
You can try this.
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
Upvotes: 1