Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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选择一个表中的所有字段,以及与给定条件匹配的另一个表中所有值的总和_Mysql_Sql - Fatal编程技术网

Mysql SQL选择一个表中的所有字段,以及与给定条件匹配的另一个表中所有值的总和

Mysql SQL选择一个表中的所有字段,以及与给定条件匹配的另一个表中所有值的总和,mysql,sql,Mysql,Sql,我有两张桌子:顾客和订单 id和电子邮件在客户中都是唯一的,而uid和price在订单中可以有重复项 我想从电子邮件地址为的客户中选择所有字段john@doe.com,以及该用户从订单中支付的总价。如果john doe还没有订购任何东西,即uid与用户id匹配的订单中有0条记录,我仍然需要返回此用户的字段列表,但支付的价格总和必须为零 以下是我尝试过的: SELECT t1.id, t1.email, t2.uid, (SELECT SUM(t2.price)) AS total

我有两张桌子:顾客和订单

id和电子邮件在客户中都是唯一的,而uid和price在订单中可以有重复项

我想从电子邮件地址为的客户中选择所有字段john@doe.com,以及该用户从订单中支付的总价。如果john doe还没有订购任何东西,即uid与用户id匹配的订单中有0条记录,我仍然需要返回此用户的字段列表,但支付的价格总和必须为零

以下是我尝试过的:

SELECT t1.id, t1.email, 
       t2.uid, (SELECT SUM(t2.price)) AS total_price
FROM customers t1, orders t2
WHERE t1.email = '$email' AND t2.uid = t1.id
问题是,只有在orders中至少有一条记录时,此查询才有效,因为对t2.uid=t1.id的检查在where子句中

如果订单中没有与客户id具有相同uid的记录,查询将返回NULL,这不是我想要的

即使订单中没有与customers.id匹配的记录,我如何始终返回客户的所有字段以及订单中支付的所有价格的总和

以下是显示所需输出的示例:


I简单方法是一个相关子查询:

SELECT c.*,
       (SELECT COALESCE(SUM(o.price), 0)
        FROM orders o
        WHERE o.u_id = c.id
       ) AS total_price
FROM customers c
WHERE c.email = '$email';
编写更好查询的提示:

学习使用参数,而不是用参数值填充查询字符串。你的WHERE应该更像WHERE c.email=?。 表别名应该是表名的缩写。 请勿在FROM子句中使用逗号。始终使用正确的显式联接语法。 当您的数据没有客户订单时,它返回一个没有行的空集。这与NULL不同,NULL表示一个不确定的值。
感谢Gordon Linoff提供的解决方案和宝贵的提示。关于您的解决方案,向查询中添加更多参数的正确方法是什么?例如,从订单中检索所有折扣的总和?@Hal_9100。你应该以问题的形式提出新的问题,包括样本数据、期望的结果等等。