2014-04-08 42 views
0

自從2天以來,我一直在處理此問題。具有相同計數值的兩個表之間的內部連接

我必須使用SQL Select語句

SELECT (


) Target 

INNER JOIN 

SELECT (


) Source 

ON Join condition 1 
AND Join condition 2 
AND Join condition 3 
AND Join condition 4 
AND Join condition 5 

目標表中創建兩個表有10000條記錄計數值。 源表具有10,000條記錄的計數值。

但是當我做內部的兩個表之間的連接上的5連接條件

我得到9573條記錄。

我基本上試圖找到源表和目標表之間的一對一匹配。我覺得目標的每個領域都與來源的每個領域相匹配。

問題:

  1. 爲什麼我的內連接多給少的記錄,即使有兩個表中的記錄相同的值?
  2. 如果這是預期的,我怎樣才能確保在加入條件之後獲得精確的10,000條記錄?

回答

0

1)INNER JOIN只輸出加入列匹配的兩個表的JOINING中的行。因此,就你的情況而言,兩個表中的行中可能不存在連接條件1,因此有些行將被過濾掉。

2)由於另一張海報提到左連接是一種方式。你需要看看你想用哪個表來源或目標作爲你的主,也就是從那裏開始並返回所有這些行。然後您根據您的條件離開加入剩餘的表格,以添加您加入條件匹配的所有列。

如果您向我們提供您正在處理的表格以及您試圖實現的查詢\結果,可能會更好。

0

這裏有一些非常好的關於不同連接的文章。但是看起來你對左邊的連接感興趣。因此,如果它存在於Target中,但不存在於Source中,則不會丟失記錄。

所以,這將是:

SELECT(...) Target 
LEFT OUTER JOIN 
SELECT(...) Source 
    ON cond1 and cond2 and cond3 and cond4 and cond5 

把那一個鏡頭,讓我知道如何去!

0

有時你需要依靠邏輯分析而不是感覺。使用此查詢找到不匹配的字段,然後制定您的下一步

SELECT 
Target.Col1,Source.Col1, 
Target.Col2,Source.Col2, 
Target.Col3,Source.Col3 
FROM 
(

) Target 
FULL OUTER JOIN 
(

) Source 
ON Target.Col1=Source.Col1 
AND Target.Col2=Source.Col2 
AND Target.Col3=Source.Col3 
WHERE (
Target.Col1 IS NULL 
OR Source.Col1 IS NULL 
OR Target.Col2 IS NULL 
OR Source.Col2 IS NULL 
OR Target.Col3 IS NULL 
OR Source.Col3 IS NULL 
) 
相關問題