我以下面的代碼作爲示例從不同的MyISAM MySQL表格中獲取,我不能使用UNION進行計數,只有的第一個值變爲正確,另一個爲空。在MyISAM MySQL表格中計算不同的表格
其實哪個是第一個,那是因爲我聽說我的表是MyISAM。
(SELECT COUNT(*) AS userCount from table_users)
UNION
(SELECT COUNT(*) AS totalposts from table_stories)
那麼有什麼解決方案?
我以下面的代碼作爲示例從不同的MyISAM MySQL表格中獲取,我不能使用UNION進行計數,只有的第一個值變爲正確,另一個爲空。在MyISAM MySQL表格中計算不同的表格
其實哪個是第一個,那是因爲我聽說我的表是MyISAM。
(SELECT COUNT(*) AS userCount from table_users)
UNION
(SELECT COUNT(*) AS totalposts from table_stories)
那麼有什麼解決方案?
如果你希望兩個結果在同一行,你可以使用子查詢。測試用例:
CREATE TABLE table_users (id int) ENGINE=MYISAM;
CREATE TABLE table_stories (id int) ENGINE=MYISAM;
INSERT INTO table_users VALUES (1), (2), (3);
INSERT INTO table_stories VALUES (1), (2), (3), (4), (5), (6);
SELECT (SELECT COUNT(*) from table_users) userCount,
(SELECT COUNT(*) from table_stories) totalposts;
+-----------+------------+
| userCount | totalposts |
+-----------+------------+
| 3 | 6 |
+-----------+------------+
1 row in set (0.00 sec)
如果你想在不同的行的結果。另一方面,您正在使用應該工作以及查詢:
(SELECT COUNT(*) AS count_value from table_users)
UNION
(SELECT COUNT(*) from table_stories);
+-------------+
| count_value |
+-------------+
| 3 |
| 6 |
+-------------+
2 rows in set (0.02 sec)
哇,你的第一個查詢工作正常,但我不知道爲什麼第二個不是!???? – 2010-11-04 16:25:03
@Mac:你有第二個查詢的NULL行嗎? – 2010-11-04 16:29:51
你期望什麼樣的結果?我只是試過了你的查詢,並且它和MyISAM和INNODB表都一樣。爲什麼在這裏使用別名? – a1ex07 2010-11-04 16:18:01
我對該查詢的期望:2個數據行,其中一個userCount爲n,totalposts爲NULL,第二行userCount爲NULL,並且totalposts爲m(其中m和n爲您的計數)。如果你想要一個列和兩個結果,組成你的聯合的選擇必須有相同的列名。 – 2010-11-04 16:26:41
問題,因爲沒有使用where,group,join,在'SHOW TABLE STATUS'的'Rows'上簡單的查找能夠完成所有事情嗎? – ajreal 2010-11-10 15:32:22