MySQL кросс-базы данных WHERE - PullRequest
       7

MySQL кросс-базы данных WHERE

0 голосов
/ 20 сентября 2010

Я работаю над проектом, который получает значения от многих измерительных станций (например, 50000), расположенных по всему миру. У меня есть две базы данных: одна хранит информацию о станциях измерений, другая хранит значения, полученные с этих станций (например, несколько миллионов). Упрощенная версия структуры базы данных может выглядеть следующим образом:

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

Мне нужен список имен всех стран из первой базы данных, для которых существуют значения во второй базе данных. Я использую MySQL с InnoDB, поэтому поддерживаются иностранные базы данных.

Я заблудился в операторе SELECT, точнее, в предложении where.

Выбор идентификаторов стран, для которых существуют значения, кажется простым:

SELECT DISTINCT id FROM measurement_values.measurement_value

В первый раз это занимает пару минут, но очень быстро при последующих вызовах, даже после перезапуска сервера базы данных; Я полагаю, это нормально.

Я думаю, что трюк COUNT, упомянутый в Проблема с данными запросов в таблице и Mysql Complex, где может помочь пункт , но я не могу понять, как это правильно.

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

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 20 сентября 2010

Это должно сделать это:

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