2012-12-18 49 views
0

我有以下的数据库结构:如何选择多个表中的值?

car 
+----------+------------+----------------+-----------------+ 
| car_id | car_name | car_model_id | car_factory_id | 
+----------+------------+----------------+-----------------+ 

car_model 
+---------------+----------------+ 
| car_model_id | car_model_name | 
+---------------+----------------+ 

factory 
+-------------+---------------+-------------------+ 
| factory_id | factory_name | factory_location | 
+-------------+---------------+-------------------+ 

factory_location 
+----------------------+------------------------+ 
| factory_location_id | factory_location_name | 
+----------------------+------------------------+ 


我想:

  • 列表中的所有工厂
  • 计数在每家工厂
  • 通过分组生产的汽车数量car_model


输出应该是这样的:

| factory_id | car_model_id = 1 | car_model_id = 2 | car_model_id = ... | 
+------------+------------------+------------------+--------------------+ 
| 1   |  145  |  3307  |   ...  | 
+------------+------------------+------------------+--------------------+ 
| 2   |  32798  |  345  |   ...  | 
+------------+------------------+------------------+--------------------+ 
| 3   |   0  |  10  |   ...  | 
+------------+------------------+------------------+--------------------+ 
| ...  |  ...  |  ...  |   ...  | 
+------------+------------------+------------------+--------------------+ 


我最亲密的尝试是这样的要求,但它仍然不是我想要的东西:
SELECT COUNT(car_id) FROM car GROUP BY car_factory_id AND car_model_id

我的RDBMS是MySQL 5.1中。

感谢所有帮助:)

+2

这是什么RDBMS? –

+0

^这个,看看内部连接。 – zimdanen

+0

RDBMS是mySQL 5.1 –

回答

1

试试这个;)

SELECT a.factory_name , c.car_model_name, 
     COUNT(b.car_factory_id) totalCount 
FROM factory a 
     LEFT JOIN car b 
      ON a.factory_id = b.car_factory_id 
     LEFT JOIN car_model c 
      ON b.car_model_id = c.car_model_id 
GROUP BY a.factory_name , c.car_model_name 
ORDER BY factory_name ASC 
+0

似乎按照我的意愿工作至。谢谢 ;) –

1

你一般不能由行的值参数列数,惯用的方式,为您要使用一个SQL数据库做什么查询得到的东西像这样的:

factory_id | car_model_id | count 
1   | 1   | 145 
1   | 2   | 3307 
... 
4   | 1   | 3245 
4   | 2   | 38 

在这种情况下,你会怎么做:

SELECT factory_id, car_model_id, COUNT(*) FROM factory 
INNER JOIN car ON factory_id = car_factory_id GROUP BY factory_id, car_model_id 
+0

我会尽快尝试,谢谢。 –

+0

您的请求会计算为每个'car_model_id'生产的汽车数量,并且不会关注'factory_id'参数。输出如下所示:http://pastebin.com/0JitQehE –

+0

似乎在这个小测试用例中对我来说正确工作。 https://gist.github.com/93de4b75d2f5718a08e3 – yiding