2012-12-18 7 views
0

je la structure de base de données suivante:Comment sélectionner des valeurs dans plusieurs tables?

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 | 
+----------------------+------------------------+ 


Je voudrais:

  • liste toutes les usines
  • comptent le nombre de voitures produites dans chaque usine
  • regroupés par car_model


La sortie devrait être quelque chose comme:

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


Mon plus proche est essayer cette demande, mais il est toujours pas ce que je veux:
SELECT COUNT(car_id) FROM car GROUP BY car_factory_id AND car_model_id

Mon SGBDR MySQL 5.1 est.

Merci pour toute aide :)

+2

Quel RDBMS est-ce? –

+0

^Ceci, et regarde dans les jointures internes. – zimdanen

+0

Le SGBDR est mySQL 5.1 –

Répondre

1

Essayez cela;)

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

Ça semble fonctionner comme je veux à. Merci ;) –

1

Vous pouvez généralement pas le nombre de colonnes paramétrées par des valeurs des lignes, la façon de faire idiomatiques requête pour ce que vous voulez avec une base de données SQL est d'obtenir quelque chose comme ceci:

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

Dans ce cas, vous feriez:

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

Je vais essayer dès que possible, merci. –

+0

Votre requête compte le nombre de voitures produites pour chaque 'car_model_id' et ne fait pas attention au paramètre' factory_id'. La sortie ressemble à ceci: http://pastebin.com/0JitQehE –

+0

Semble fonctionner correctement pour moi dans ce petit cas de test. https://gist.github.com/93de4b75d2f5718a08e3 – yiding

Questions connexes