2010-11-04 43 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