0

我有两个表:“公司”和“订单”。第一个包含公司信息,第二个包含公司的所有订单。( order. company= company. ID)。

我正在对第一个表进行查询,例如纽约市的所有公司。我想与order表进行连接,以便立即显示公司的订单数量。我可以用一个简单的 JOIN 查询来做到这一点,但是它不包含 0。例如,如果一家公司还没有订单,它根本不会出现,而它应该在列表中,有 0 个订单。

期望的最终结果:

----------------------------------------
|  ID  |     Name    |   ...  | Orders |
----------------------------------------
| 105  |  Company A  |   ...  |   14   |
| 115  |  Company B  |   ...  |    5   |
| 120  |  Company C  |   ...  |    0   |
| 121  |  Company D  |   ...  |    0   |
----------------------------------------

提前致谢!

4

3 回答 3

1

这是一个left joinwith 聚合:

SELECT c.ID, c.Name, count(o.company) as total
FROM companies c left outer join
     orders o
     on c.id = o.company
WHERE c.city = 'New York'
GROUP BY c.ID;

在 MySQL 中,最好避免from子句中的子查询——在可能的情况下——因为派生表是实际创建的。

COUNT()表达式通过计算用于连接的 id 字段中的非空值的数量来计算匹配的数量。

于 2013-09-02T12:17:08.383 回答
0

试试这个

SELECT com.id,com.name,od.orders FROM compnay AS com 
LEFT JOIN orders AS od ON od.company = com.id;
于 2013-09-02T12:11:47.583 回答
0
SELECT companies.ID,companies.Name ,orders.total FROM
(SELECT ID,Name FROM company where county ='NEW YORK')  companies
LEFT JOIN (SELECT company,COUNT(*) as total FROM order GROUP BY company) orders
ON orders.company = companies.ID
于 2013-09-02T12:12:19.410 回答