Mysql SQL选择一个表中的所有字段,以及与给定条件匹配的另一个表中所有值的总和
我有两张桌子:顾客和订单 id和电子邮件在客户中都是唯一的,而uid和price在订单中可以有重复项 我想从电子邮件地址为的客户中选择所有字段john@doe.com,以及该用户从订单中支付的总价。如果john doe还没有订购任何东西,即uid与用户id匹配的订单中有0条记录,我仍然需要返回此用户的字段列表,但支付的价格总和必须为零 以下是我尝试过的: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
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。你应该以问题的形式提出新的问题,包括样本数据、期望的结果等等。