2016-11-07 20 views
0

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

У меня есть база данных содержит 7K таблицы и я пытаюсь выбрать несколько значений некоторых из этих таблиц

cursor.execute("SELECT SUM(VOLUME) FROM stat_20030103 WHERE company ='Apple'") 
for (Volume,) in cursor: 
print(Volume) 

Это работает для одной таблицы например (stats_20030103). Однако я хочу суммировать весь объем всех таблиц .startwith (stats_2016), где название компании - Apple. Как я могу перебирать таблицы?

+1

Попробуйте выполнить «SHOW TABLES» и сыграйте с результатом. –

ответ

0

Возможно, вы можете использовать select * from information_schema.tables, чтобы получить имя всех таблиц в запросе.

0

Я не эксперт в MySQL, но вот что-то быстро и просто в питоне:

# Get all the tables starting with "stats_2016" and store them 
cursor.execute("SHOW TABLES LIKE 'stats_2016%'") 
tables = [v for (v,) in cursor] 

# Iterate over all tables, store the volumes sum 
all_volumes = list() 
for t in tables: 
    cursor.execute("SELECT SUM(VOLUME) FROM %s WHERE company = 'Apple'" % t) 
    # Get the first row as is the sum, or 0 if None rows found 
    all_volumes.append(cursor.fetchone()[0] or 0) 

# Return the sum of all volumes 
print(sum(all_volumes)) 
0

Я бы попытался левой присоединиться.

SELECT tables.*, stat.company, SUM(stat.volume) AS volume 
    FROM information_schema.tables AS tables LEFT JOIN mydb.stat_20030103 AS stat 
    WHERE tables.schema = "mydb" GROUP BY stat.company; 

Это даст вам все результаты сразу. Возможно, MySQL не поддерживает присоединение к метатегам, и в этом случае вы можете выбрать его во временную таблицу.

CREATE TEMPORARY TABLE mydb.tables SELECT name FROM information_schema.tables WHERE schema = "mydb" 

См. MySQL doc on information_schema.table.