-5

我正在使用 MYSQL .. 我有两个表:

TABLE 1 (TABLE NAME T1)
SL   NAME
1     a
2     b
3     c
4     c 

table 2 (table name T2)
SL   NAME
1     a
2     c
3     c
4     c

Q1:我如何计算两个表中“c”的总数?

Q2:两个表中的最大出现次数是哪个名称?

sl 是主键...我的查询是:> select count(*) from t1,t2 where t1.name=t2.name where t1.name='c'; 但它显示 6

4

2 回答 2

2

要计算c两个表,您应该使用UNION,而不是JOIN.

句法:

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]

文件:

http://dev.mysql.com/doc/refman/5.0/en/union.html

编辑:我将解释您提供的查询。

select count(*) from t1,t2 where t1.name=t2.name where t1.name='c';

首先,您WHERE两次使用子句,这是一个语法错误。应该:

select count(*) from t1,t2 where t1.name=t2.name AND t1.name='c';

这与以下内容相同:

SELECT count(*) from t1
JOIN t2 ON t1.name=t2.name 
WHERE t1.name='c';

您只选择具有c值的行,因此这些是我们将考虑的行:

TABLE 1 (TABLE NAME T1)
SL   NAME
3     c
4     c 

table 2 (table name T2)
SL   NAME
2     c
3     c
4     c

现在,简单JOIN 地将表 1 中的每一行连接到表 2 中的每一行(当然条件为真)

所以计算前的结果是:

t1.SL  t1.NAME  t2.SL  t2.NAME
3      c        2      c
4      c        3      c
3      c        4      c
4      c        2      c
3      c        3      c
4      c        4      c

这是 6 行。

你的两个问题的答案。

SELECT name, count(*) as cnt
FROM(select t1.name from t1
     union all
     select name from t2) as tem
group by name
order by cnt DESC

此查询将为您提供按出现次数排序的名称排名。要仅检索c计数,只需添加WHERE子句。仅检索出现次数最多的名称集LIMIT子句1

于 2013-09-12T07:30:13.797 回答
0

INSERT INTO #test SELECT NAME FROM m_t1 WHERE NAME ='c' UNION all SELECT NAME FROM m_t2 WHERE NAME ='c'

从#test中选择计数(*)

于 2013-09-12T08:12:05.113 回答