2015-04-16 54 views
0

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表中的所有值和B表中的常用值。

右外連接將顯示B表中的所有值和A表中的公共值。

那些共同的價值觀是指什麼?如果它的外加入,這意味着它應該只給出結果是正確的?如果其正確外部加入,這意味着它應該只給出的結果是正確的?

5日聲明我已經使用WHERE子句這意味着它應該給我只能項吧?

請幫我解決這個問題。

+3

您的ID字段在任一表中都是唯一的嗎?看起來你只是獲得了一些值的多個匹配。 –

+0

是的,它在任何一個表中都不是唯一的。我的要求是從A表中獲取所有行,並且列中有3列,B列中的值分別爲1列 – Subbu

回答

2

您的預期結果似乎基於兩個表中的行之間存在一對一映射的錯誤假設。

對於標準內連接(與上次查詢相同),將返回兩個表中各行的每個匹配組合。由於您獲得的結果多於第一個表中的行,因此第一個表中的給定行在第二個表中可能具有多個匹配行。

例如,如果表A中的ArticleID爲1,並且表B中的DocID爲1的行中有兩行,則這兩個表中的兩個表的連接將產生2行。

當您更改爲外部聯接時,您將獲得至少與內部聯接相同的行數,並且可能會更多。外連接將返回與相應的內連接相同的行;另外,對於在「外部」表中沒有任何匹配的「內部」表中的任何行,它將返回該行,其中第二個表中的列的值爲NULL。

您的LEFT OUTER JOIN返回與內連接相同的行數;這意味着表A中的每一行在表B中至少有一個匹配的行。

您的RIGHT OUTER JOIN會返回更多行。這意味着表B中有許多行在表A中沒有匹配的行。

+0

感謝您澄清Dave。現在我已經通過使用兩個列的組合,如下從 LCL_RKM_AuditForm >> SELECT COUNT(*)實現了我要求甲 左外連接 RKM_KnowledgeArticleManager乙 上A.ARTICLE_ID = B.DocID和A.ARTICLE_VERSION = B. ARTICLEVERSION; – Subbu