Mysql 内部联接似乎返回了太多的行
为什么我的Mysql 内部联接似乎返回了太多的行,mysql,sql,Mysql,Sql,为什么我的内部联接返回的记录比查询的最大表多 此查询返回69 899条记录: select count(*) from table_1@a_connection dd inner join table_2@a_connection pr on dd."ProjectRef" = pr."ProjectRef" 而此查询返回29486条记录 select count(*) from table_1@a_connection 这个查询返回179条记录 select cou
内部联接
返回的记录比查询的最大表多
此查询返回69 899条记录:
select count(*)
from table_1@a_connection dd
inner join table_2@a_connection pr
on dd."ProjectRef" = pr."ProjectRef"
而此查询返回29486条记录
select count(*)
from table_1@a_connection
这个查询返回179条记录
select count(*)
from table_2@a_connection
这两个表是使用MySql数据库上的dblink查询的。要获取预期返回的行数,请执行以下操作:
select sum(dd.cnt * pr.cnt)
from (select "ProjectRef", count(*) as cnt
from table_1@a_connection
group by "ProjectRef"
) dd join
(select "ProjectRef", count(*) as cnt
from table_2@a_connection
group by "ProjectRef"
) pr
on dd."ProjectRef" = pr."ProjectRef";
我很肯定这会有69899的回报。您可以检查子查询的结果,以了解重复项目引用的情况。要获取预期返回的行数,请执行以下操作:
select sum(dd.cnt * pr.cnt)
from (select "ProjectRef", count(*) as cnt
from table_1@a_connection
group by "ProjectRef"
) dd join
(select "ProjectRef", count(*) as cnt
from table_2@a_connection
group by "ProjectRef"
) pr
on dd."ProjectRef" = pr."ProjectRef";
我很肯定这会有69899的回报。您可以检查子查询的结果,以了解重复项目引用的情况
为什么我的内部联接返回的记录比表中最大的记录多
询问
因为第一个表或第二个表或两者都在ProjectRef
列中包含重复的值。请看一下这个简单的例子,看看是什么导致了这种情况:
此示例说明了为什么联接的结果可以提供比包含最大表的记录多得多的记录 为什么我的内部联接返回的记录比表中最大的记录多 询问 因为第一个表或第二个表或两者都在
ProjectRef
列中包含重复的值。请看一下这个简单的例子,看看是什么导致了这种情况:
此示例说明了为什么联接结果可以提供比包含最大表的记录多得多的记录。因为一对多关系。因为一对多关系。
select * from b;
| b_id | b_name |
|------|--------|
| 1 | B1 |
| 1 | B2 |
| 1 | B3 |
select * from a
join b
on a.a_id = b.b_id;
| a_id | a_name | b_id | b_name |
|------|--------|------|--------|
| 1 | A1 | 1 | B1 |
| 1 | A2 | 1 | B1 |
| 1 | A3 | 1 | B1 |
| 1 | A1 | 1 | B2 |
| 1 | A2 | 1 | B2 |
| 1 | A3 | 1 | B2 |
| 1 | A1 | 1 | B3 |
| 1 | A2 | 1 | B3 |
| 1 | A3 | 1 | B3 |