Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择从两个表中计数=SQL中的乘法?_Mysql_Sql_Join_Select_Count - Fatal编程技术网

Mysql 选择从两个表中计数=SQL中的乘法?

Mysql 选择从两个表中计数=SQL中的乘法?,mysql,sql,join,select,count,Mysql,Sql,Join,Select,Count,我随机尝试运行如下查询: select count(*) from table1, table2 结果基本上是两个表的实际行数的乘积,即结果是645792行,这是基于table1有868行,而table2有744行的事实 这是预期的行为吗?我查看了,但无法更好地理解此行为。您当前的查询: select count(*) from table1, table2 正在使用老式的隐式联接语法。由于WHERE子句中没有出现联接条件(没有WHERE子句),联接默认为交叉联接。这只是两个表中记录之间的叉

我随机尝试运行如下查询:

select count(*) from table1, table2
结果基本上是两个表的实际行数的乘积,即结果是645792行,这是基于
table1
有868行,而
table2
有744行的事实

这是预期的行为吗?我查看了,但无法更好地理解此行为。

您当前的查询:

select count(*) from table1, table2
正在使用老式的隐式联接语法。由于
WHERE
子句中没有出现联接条件(没有
WHERE
子句),联接默认为交叉联接。这只是两个表中记录之间的叉积,这就是您当前看到的。编写查询的更好方法是:

SELECT COUNT(*)
FROM table1
CROSS JOIN table2;

这是您的
from
条款:

from table1, table2
这相当于:

from table1 cross join table2
这是两个表的笛卡尔乘积,它生成一个包含868*744行的结果集。然后,
count(*)
只计算结果行的数量,从而得到结果

如果要对每个表中的行数求和,则需要计算两个单独的计数:

select
     (select count(*) from table1) 
     + (select count(*) from table2) total_no_rows 

“内部连接和(逗号)在没有连接条件的情况下在语义上是等价的:两者都产生笛卡尔积”

检查交叉连接,它可能会帮助您了解手册中没有的内容?你还做了什么研究?返回您不期望的内容的第一个子表达式是什么?当你有一个特定的问题,这将是一个常见问题。在考虑发帖之前,请先阅读您的课本和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。暂停总体目标的工作,将代码切分为第一个表达式,该表达式没有给出您期望的内容,并说出您期望的内容和原因。正确,但需要注意的是,并非所有类型的SQL都支持没有
on
子句的内部联接(MySQL支持,在本例中,内部联接成为交叉联接)。