将两个表连接在一起时,很难理解哪个表实际上是count(*)进行计数。

时间:2018-08-20 01:50:28

标签: sql

如果我有以下代码,哪个表是count(*)用来计算其中的行数或行数?

SELECT COUNT(*)
FROM region r
JOIN sales_rep s
ON r.id = s.region_id

非常感谢!

2 个答案:

答案 0 :(得分:0)

它将整个联接查询中的行计数在内。它与:

SELECT COUNT(*)
FROM
(SELECT * FROM region r
JOIN sales_rep s
ON r.id = s.region_id)

答案 1 :(得分:0)

它正在计算联接中“结果”表的所有记录。该数字将取决于region和sales_rep之间的关系类型。假设您的域是一个区域具有零个或多个sales_rep,并且所有sales_rep具有一个且只有一个区域,那么该计数将始终等于sales_rep的计数。例如:

regions: (id)            sales_rep: (id, reg_id)
A                        1 A
B                        2 A
C                        3 B
                         4 C
count(*) = 4

另一方面,如果sales_rep不能有区域,则排除无区域的区域:

regions: (id)            sales_rep: (id, reg_id)
A                        1 A
B                        2 null
C                        3 B
                         4 C
count(*) = 3

或者,如果sales_rep可以具有多个区域,则结果与第一种情况相同,但是您的计数将更高:

regions: (id)            sales_rep: (id, reg_id)
A                        1 A
B                        1 B
C                        2 A
                         3 B
                         4 C
count(*) = 5

我绝对建议您进行选择*,以便您可以自己查看发生了什么,然后将其更改为计数。另外,请参阅本文以更好地了解关节:https://www.w3schools.com/sql/sql_join.asp