Oracle 联接没有给出正确的答案

Oracle 联接没有给出正确的答案,oracle,join,oracle11g,oracle10g,oracle-sqldeveloper,Oracle,Join,Oracle11g,Oracle10g,Oracle Sqldeveloper,1)从LCL\U RKM\U审核表中选择计数(*)**O/P:868** 2)从RKM_KnowledgeArticleManager中选择计数(*)**O/P:8511** 3)select count(*) from LCL_RKM_AuditForm A **right** outer join RKM_KnowledgeArticleManager B on A.ARTICLE_ID=B.DocID; **O/P : 9216** 4)select count(*) from L

1)从LCL\U RKM\U审核表中选择计数(*)**O/P:868**

2)从RKM_KnowledgeArticleManager中选择计数(*)**O/P:8511**

3)select count(*) from 
LCL_RKM_AuditForm A
**right** outer join 
RKM_KnowledgeArticleManager B
on A.ARTICLE_ID=B.DocID; **O/P : 9216**

4)select count(*) from 
LCL_RKM_AuditForm A
**left** outer join 
RKM_KnowledgeArticleManager B
on A.ARTICLE_ID=B.DocID; **O/P : 1973**

5)select count(*) from 
LCL_RKM_AuditForm A,RKM_KnowledgeArticleManager B
**where** A.ARTICLE_ID=B.DocID; **O/P : 1973**
我的理解是

左侧外部联接将显示表中的所有值和B表中的公共值

右外部联接将显示B表中的所有值和A表中的公共值

共同价值观指的是什么?如果它是外连接,这意味着它应该只给出868右结果?如果它的外部联接,这意味着它应该只给出8511结果,对吗

第5条语句我使用了WHERE子句,这意味着它应该只给我868个条目,对吗


请在这方面帮助我。

您的预期结果似乎基于错误的假设,即两个表中的行之间存在一对一的映射

对于标准内部联接(如上一次查询中),将返回两个表中匹配的行组合。由于得到的结果比第一个表中的行多,因此第一个表中的给定行在第二个表中可能有多个匹配行,这必须是真的

例如,如果表A中有一行ArticleID=1,表B中有两行DocID=1,那么两个表在这些字段上的联接将产生两行

当您更改为外部联接时,您将获得至少与内部联接相同的行数,甚至可能更多。外部联接将返回与相应的内部联接相同的行;另外,对于“内部”表中与“外部”表中不匹配的任何行,它将返回该行,第二个表中的列为空值

左外部联接返回与内部联接相同的行数;这意味着表A中的每一行在表B中至少有一个匹配行


右外部联接返回更多行。这意味着表B中有许多行在表A中没有匹配的行。

您的ID字段在这两个表中都是唯一的吗?看起来您只是得到了一些值的多个匹配项。是的,它在两个表中都不是唯一的。我的要求是从一个包含3列的表中获取所有行,并从包含1列的B表中获取相应的值。感谢您的澄清。现在,我已经通过使用以下两列的组合实现了我的要求>>从LCL_RKM_AuditForm A左外连接RKM_KnowledgeArticleManager B中选择count(*)A.ARTICLE_ID=B.DocID和A.ARTICLE_VERSION=B.ARTICLEVERSION;