1
我在MySQL 5.1.41以下查詢:是否可以對mysql數據庫中的每個數據庫執行查詢,並僅使用mysql命令環境對結果進行求和或求和?
select distinct table_schema from information_schema.tables where table_schema like '%dog%';
我想採取這一命令的輸出:
+-------------------+ | table_schema | +-------------------+ | dog_a | | dog_b | +-------------------+
,然後使用該數據庫的名稱作爲輸入,如查詢以下:
select count(*) from (select * from dog_a.log where insane = 1 UNION ALL select * from dog_b.log where insane = 1) as total_count;
,使得該算法本質上是:
對於數據庫中的每個數據庫,計算瘋狂的狗的數量並將所有數據庫中的總數相加。然而,我不知道如何包裝這兩個查詢來從第一個查詢中獲取數據庫名作爲mysql內第二個查詢的迭代輸入。
我需要能夠完全在數據庫中完成此操作。
任何想法?
謝謝!
這解決了我在MySQL 5.1上的問題。但是,我注意到它破壞了MySQL 5.0。問題似乎是生成的中間聯合查詢在大約10%的表中截斷爲查詢。截斷很清楚,因爲select語句被削減了一半。我會追求這個問題,但是如果你知道可能會造成什麼問題,我會全神貫注。它看起來像一個bug。這是在centos上運行mysql 5.0.77。謝謝。 – 2010-09-28 18:06:20
我想到了mysql 5.0上的問題。 GROUP_CONCAT_MAX_LEN默認爲1024,這取決於您定義了多少個數據庫。在這種情況下,我們有〜100,所以生成的SQL在GROUP_CONCAT中被截斷。解決方案是將GROUP_CONCAT_MAX_LEN設置爲會話中足夠大的內容,例如:set session group_concat_max_len = 102400; – 2010-09-29 22:49:54
@David - 你在5.1上設置了更高的值,然後呢? – 2010-09-29 22:51:14