Mysql包含列,不返回特定日期的行

Mysql包含列,不返回特定日期的行,mysql,sql,Mysql,Sql,我想问一个关于mysql查询的快速问题 我有一个名为trans的表: +----+---------------------+------+-------+----------+----------+ | ID | Date | User | PCNum | Customer | trans_In | +----+---------------------+------+-------+----------+----------+ | 8 | 2013-01-23

我想问一个关于mysql查询的快速问题

我有一个名为trans的表:

+----+---------------------+------+-------+----------+----------+
| ID | Date                | User | PCNum | Customer | trans_In |
+----+---------------------+------+-------+----------+----------+
|  8 | 2013-01-23 16:24:10 | test | PC2   | George   |       10 |
|  9 | 2013-01-23 16:27:22 | test | PC2   | Nick     |        0 |
| 10 | 2013-01-24 16:28:48 | test | PC2   | Ted      |       10 |
| 11 | 2013-01-25 16:36:40 | test | PC2   | Danny    |       10 |
+----+---------------------+------+-------+----------+----------+
以及另一名指定客户:

+----+---------+-----------+
| ID | Name    | Surname   |
+----+---------+-----------+
|  1 | George  |           |
|  2 | Nick    |           |
|  3 | Ted     |           |
|  4 | Danny   |           |
|  5 | Alex    |           |
|  6 | Mike    |           |
   .
   .
   .
   .
+----+---------+-----------+
我想查看日期范围内特定客户在列中的trans_之和,但也要在结果集中包括在所选日期范围内没有任何记录的客户。它们的trans_in之和可能显示为NULL或0,这无关紧要

我有以下疑问:

SELECT
  `Date`,
  Customer,
  SUM(trans_in) AS 'input'
FROM trans
WHERE Customer IN('George','Nick','Ted','Danny')
    AND `Date` >= '2013-01-24'
GROUP BY Customer
ORDER BY input DESC;
但这只会返回“Ted”和“Danny”的金额,因为他们只有在1月24日之后才有交易

我如何将WHERE IN(…)功能中的所有客户包括在内,甚至包括那些在所选日期范围内没有交易的客户

我想我将不得不以某种方式将他们加入客户表,但我不知道如何加入

提前谢谢


:)

为了包含一个表中的所有记录,而不在另一个表中包含匹配的记录,必须使用左联接

SELECT
  t.`Date`,
  c.name,
  SUM(t.trans_in) AS 'input'
FROM customers c LEFT JOIN trans t ON (c.name = t.Customer AND t.`Date` >= '2013-01-24')
WHERE c.name IN('George','Nick','Ted','Danny')
GROUP BY c.name
ORDER BY input DESC;
当然,我要提到的是,您应该在相关表中按ID而不是按名称引用客户。您当前的设置会导致信息重复。如果客户更改了他们的姓名,您现在必须更新trans表中的所有相关记录,而不仅仅是customer表中的记录。

试试这个

 SELECT

 `Date`,
 Customer,
 SUM(trans_in) AS 'input'
 FROM trans
 inner join customers
 on customers.Name = trans.Customer
 WHERE Customer IN('George','Nick','Ted','Danny')

 GROUP BY Customer
 ORDER BY input DESC;

您忘记了日期范围条件。我添加了它,但结果集是相同的。。。乔治和尼克不是结果集的一部分。乔治和尼克仍然没有显示。。。结果集与我的查询相同,对不起,我错了!!!这个答案是正确的!!!同时,我从客户表中删除了乔治和尼克!!!!:)当然,设计很差,更新客户的名字将是一件痛苦的事。。。但是此数据库后面的应用程序没有更新名称选项。只删除。而且WHERE in(…)集合中的客户始终是表客户的一部分!非常感谢keelerm的有用评论!我的荣幸。我很高兴能提供帮助。