Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql I有错误代码:1242子查询返回超过1行_Mysql_Sql - Fatal编程技术网

Mysql sql I有错误代码:1242子查询返回超过1行

Mysql sql I有错误代码:1242子查询返回超过1行,mysql,sql,Mysql,Sql,上面是我的sql语句。我有错误代码1242。我不明白我为什么会出错。我试图通过邮政编码以及地区、城市、邮政编码来计算总收入 你能告诉我出了什么问题以及如何解决吗 提前感谢您。请尝试以下操作 SELECT address.district, city.city, address.postal_code, SUM( amount ) AS revenue FROM address JOIN city ON address.city_ID = city

上面是我的sql语句。我有错误代码1242。我不明白我为什么会出错。我试图通过邮政编码以及地区、城市、邮政编码来计算总收入

你能告诉我出了什么问题以及如何解决吗

提前感谢您。

请尝试以下操作

SELECT address.district,
       city.city,
       address.postal_code,
       SUM( amount ) AS revenue
FROM address
JOIN city     ON address.city_ID = city.city_ID
JOIN customer ON address.address_ID = customer.address_ID
JOIN payment  ON customer.customer_ID = payment.customer_ID
GROUP BY district, city, postal_code
ORDER BY district, postal_code;

您需要将其设置为相关子查询,而不是分组查询

select district,
    city,
    postal_code,
    (
        select sum(amount) as revenue
        from payment,
            address
        where postal_code = sakila.address.postal_code
        )
您还需要支付表和地址表之间的连接条件,否则将在它们之间创建完整的叉积。在主查询中,还需要付款表的联接条件

您应该学习使用ANSI连接语法编写查询,这样就不太可能忘记设置连接条件。您可以简单地加入支付,而不是使用相关子查询。我使用了LEFT JOIN,因此在特定位置没有客户或付款时,您将获得revenu=0

完整查询应为:

SELECT district, city, postal_code, IFNULL(SUM(amount), 0) AS revenue
FROM address AS a
JOIN city AS c ON a.city_id = c.city_id
LEFT JOIN customer AS cus ON cus.address_id = a.address_id
LEFT JOIN payment AS p ON p.customer_id = c.customer_id
GROUP BY district, city, postal_code
ORDER BY district, postal_code

错在哪里-交叉连接两次,选择子查询中的多行,基于逗号的连接。请发布示例数据和所需输出。我认为,问题来自“选择sumamount作为支付收入,地址组按邮政编码”@Salman-即使修复也无法修复任何问题。当我尝试仅选择sumamount作为支付收入,地址组按邮政编码这部分,它工作得很好。求和的结果正是我想要的。所以,我添加了子查询。我错了吗?付款是否包含邮政编码,或者付款和地址是否以另一种方式连接?您的子查询具有与OP相同的交叉连接。我知道,我只是在答案中添加了一些相关内容。在不了解更多关于表的信息的情况下,我不知道如何修复该问题。我尝试过,但得到的sum列的值都相同。是否添加了缺少的联接条件?我不知道如何使用联接。对不起,不客气。如果你想解释我的推理/答案,请随意说。有没有不使用JOIN-ON的可能方法?是的,尽管它们往往效率较低。你有什么想法吗?你能告诉我不使用JOIN ON的方法吗?即使效率不高,我也要学习。不是真的。我在附近见过它们,但从未在这种情况下学习过它们,因为JOIN的效率似乎总是更高。很抱歉
SELECT district, city, postal_code, IFNULL(SUM(amount), 0) AS revenue
FROM address AS a
JOIN city AS c ON a.city_id = c.city_id
LEFT JOIN customer AS cus ON cus.address_id = a.address_id
LEFT JOIN payment AS p ON p.customer_id = c.customer_id
GROUP BY district, city, postal_code
ORDER BY district, postal_code