要计算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
。