我以下面的代码作为示例从不同的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