2010-09-20 9 views
0

Je travaille sur un projet qui obtient des valeurs de plusieurs stations de mesure (par exemple 50000) situées partout dans le monde. J'ai 2 bases de données, l'une stockant des informations sur les stations de mesure, l'autre stockant des valeurs obtenues à partir de ces stations (par exemple plusieurs millions). Une version super-simplifiée de la structure de base de données pourrait ressembler à ceci:MySQL cross-database WHERE clause

database measurement_stations 

    table measurement_station 
    id  : primary key 
    name : colloquial station name 
    country : foreign key into table country 

    table country 
    id  : primary key 
    name : name of the country 

database measurement_values 

    table measurement_value 
    id  : primary key 
    station : id of the station the value came from 
    value : measured value 

je besoin d'une liste des noms de tous les pays de la première base de données pour lesquelles les valeurs existent dans la deuxième base de données. J'utilise MySQL avec InnoDB, donc cross-database étranger sont pris en charge.

Je suis perdu sur l'instruction SELECT, plus précisément, la clause where.

Sélection des ID des pays pour lesquels des valeurs existent semble facile:

SELECT DISTINCT id FROM measurement_values.measurement_value 

Cela prend quelques minutes la première fois, mais il est très rapide dans les appels suivants, même après le redémarrage du serveur de base de données; Je suppose que c'est normal.

Je pense que le truc COUNT mentionné dans Problem with Query Data in a Table et Mysql Complex Where Clause pourrait aider, mais je ne peux pas sembler faire les choses correctement.

SELECT country.name FROM measurement_stations WHERE country.id = measurement_station.id 
AND (id is in the result of the previous SELECT statement) 

Quelqu'un peut-il m'aider?

Répondre

0

Cela devrait le faire:

select distinct m.country, ct.name 
from measurement_stations..measurement_station m 
inner join measurement_values..measurement_value mv on mv.station = m.id 
inner join measurement_stations..country ct on ct.id = m.country 
+0

qui fonctionne, excellent. merci beaucoup pour l'aide rapide! :-) – ssc

+0

première fois que je lance la requête: 184 lignes dans l'ensemble (27 min 10.41 sec) – ssc

+0

la deuxième fois que je l'exécute: 184 lignes dans l'ensemble (1 min 20,92 sec) – ssc