我得到的子查询在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/

10-14 12:54