加入没有给出正确的答案

Joins are not giving the right answers

1)select count(*) from LCL_RKM_AuditForm; **O/P : 868**

2)select count(*) from 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**

我的理解是.,.

左外连接将显示 A table 中的所有值和 B table 中的常用值。

右外连接将显示 B table 中的所有值和 A table 中的常用值。

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

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

请帮我解决这个问题。

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

对于标准内部联接(如在您的上一个查询中),来自两个 table 的行的每个匹配组合都被 returned。由于您获得的结果多于第一个 table 中的行数,因此第一个 table 中的给定行在第二个 table 中可能有多个匹配行。

例如,如果在 table A 中有一行 ArticleID = 1,在 Table B 中有两行 DocID = 1,则将两者合并 [=26=这些字段上的 ]s 将产生 2 行。

当您更改为外部联接时,您将获得至少与内部联接相同数量的行,甚至可能更多。外部联接将 return 与相应的内部联接相同的行;另外,对于 "inner" table 中的任何行,在 "outer" table 中没有任何匹配项,它将 return 那一行,具有 NULL 值对于第二个 table.

的列

您的 LEFT OUTER JOIN return 与内部联接的行数相同;这意味着 table A 中的每一行在 table B 中至少有一个匹配行。

您的 RIGHT OUTER JOIN return 还有很多行。这意味着 table B 中有许多行在 table A 中没有匹配的行。