如何解决查询帮助? MySQL,LEFT JOIN,GROUP BY,缺少数据
| 如何更改此查询,以使其在添加2011-01-02行后仍显示0个在2011-01-01收到的flotsam?mysql> SELECT * FROM Items;
+---------+
| Name |
+---------+
| widgets |
| things |
| stuff |
| flotsam |
| jetsam |
+---------+
mysql> SELECT * FROM Received;
+---------+---------------+-------------+----------+
| Name | invoiceNumber | invoiceDate | Quantity |
+---------+---------------+-------------+----------+
| widgets | 1 | 2011-01-01 | 1 |
| widgets | 2 | 2011-01-01 | 2 |
| things | 3 | 2011-01-01 | 3 |
| things | 4 | 2011-01-01 | 4 |
| stuff | 5 | 2011-01-01 | 5 |
| jetsam | 7 | 2011-01-01 | 7 |
+---------+---------------+-------------+----------+
mysql> SELECT Name,IFNULL(SUM(Quantity),0)
-> FROM Items AS I
-> LEFT JOIN Received AS R
-> USING (Name)
-> WHERE invoiceDate=\'2011-01-01\' OR invoiceDate IS NULL
-> GROUP BY Name;
+---------+-------------------------+
| Name | IFNULL(SUM(Quantity),0) |
+---------+-------------------------+
| flotsam | 0 |
| jetsam | 7 |
| stuff | 5 |
| things | 7 |
| widgets | 3 |
+---------+-------------------------+
mysql> INSERT INTO Received VALUES (\'flotsam\',8,\'2011-01-02\',8);
mysql> SELECT Name,0) |
+---------+-------------------------+
| jetsam | 7 |
| stuff | 5 |
| things | 7 |
| widgets | 3 |
+---------+-------------------------+
解决方法
采用:
SELECT i.name,COALESCE(SUM(r.quantity),0) AS total_quantity
FROM ITEMS i
LEFT JOIN RECEIVED r ON r.name = i.name
AND r.invoicedate = \'2011-01-01\'
GROUP BY i.name
在JOIN之前应用OUTER JOIN的ON
子句中提供的条件(左,右)。在JOIN之后应用WHERE子句中的条件(针对将表OUTER JOIN连接到的条件)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。