2010-11-04 44 views
0

我以下面的代碼作爲示例從不同的MyISAM MySQL表格中獲取,我不能使用UNION進行計數,只有的第一個值變爲正確,另一個爲空在MyISAM MySQL表格中計算不同的表格

其實哪個是第一個,那是因爲我聽說我的表是MyISAM。

(SELECT COUNT(*) AS userCount from table_users) 
UNION 
(SELECT COUNT(*) AS totalposts from table_stories) 

那麼有什麼解決方案?

+0

你期望什麼樣的結果?我只是試過了你的查詢,並且它和MyISAM和INNODB表都一樣。爲什麼在這裏使用別名? – a1ex07 2010-11-04 16:18:01

+0

我對該查詢的期望:2個數據行,其中一個userCount爲n,totalposts爲NULL,第二行userCount爲NULL,並且totalposts爲m(其中m和n爲您的計數)。如果你想要一個列和兩個結果,組成你的聯合的選擇必須有相同的列名。 – 2010-11-04 16:26:41

+0

問題,因爲沒有使用where,group,join,在'SHOW TABLE STATUS'的'Rows'上簡單的查找能夠完成所有事情嗎? – ajreal 2010-11-10 15:32:22

回答

1

如果你希望兩個結果在同一行,你可以使用子查詢。測試用例:

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) 
+0

哇,你的第一個查詢工作正常,但我不知道爲什麼第二個不是!???? – 2010-11-04 16:25:03

+0

@Mac:你有第二個查詢的NULL行嗎? – 2010-11-04 16:29:51