2016-05-31 138 views
0

連接返回值,但在兩個表中都找到值。我的語法不好?左外部連接返回兩個表中的結果

select distinct source.[Manufacturer] 
    from Products2.dbo.sourceexport source 
    left join Products2.dbo.uniqueprods u 
    on source.[Manufacturer]=u.mfg 
    where u.mfg is null; 

    select [Manufacturer] from Products2.dbo.sourceexport where [Manufacturer]='XYZ'; 

    select mfg from Products2.dbo.uniqueprods where mfg='XYZ' 

選擇/加入語句返回約20行,第一行是「XYZ」,但它也可能是格式「XYZ」的一些行。當我將結果(有/無填充,有或沒有ltrim(rtrim(u.mfg))在我的所有領域)複製到第二和第三個語句時,我分別獲得了15和260個結果。

左外部連接的任何結果應該爲右表返回0行,並且260比我期望的0多。

編輯:我在前面的問題中被告知我太冗長了。顯然在這裏,我不夠冗長。謝謝。 我想要一個左外連接。這意味着,我需要source中的製造商不在u中。我們可以返回所有行的所有字段,如果這有助於您更好地回答問題,那麼我可以創建第二步,從這些結果中選擇不同的製造商。

我有幾百萬條記錄,包含我的客戶認爲敏感的信息。向這些小部件製造商的行業暗示是不合適的。除了我的客戶,其他任何人都不感興趣。 (a,c,e,g,g,i,k,l)的表格u表格u 。我想返回值(b,d,f,h,j)。我得到的返回值中有一個但不是c。我不知道它是否包含(b,d,f,h,j)的全部內容,因爲我不相信我的陳述有效。

以不同的方式說明問題:我如何編寫左外連接,而語句的結果都不在右表中?

編輯2:從下面的語句看來,語法不錯。使我的第一個編輯問題重述無效。回到最初的問題陳述,爲什麼我的左外連接返回兩個表中的值?

除了不可見字符(這應該由ltrim(rtim())解決,對嗎?)和字段類型,還有哪些其他因素可能導致連接出現故障?

+3

添加樣品表數據,當前結果和預期結果! – jarlh

+0

雖然你的問題不是很清楚,那麼你想要sourceexport中存在的行,但不是唯一的產品?此外,在連接查詢中有獨特的子句,但不在第二個和第三個where語句中。這可能會給出不同的行數。如@jarlh所述,請添加更多信息。 –

+0

@AkankshaSingh謝謝。這是我的第一個SQL問題。例如,VBA要求信息少得多,而且我正在爲那些聽衆習慣寫作。是的,有一個明確的條款。行數並不相關,但是有一件事:我包含行數的唯一原因是,因爲第一條語句的任何結果,我認爲應該爲第三條語句返回0行。除0之外的任何內容都是不可取的。我可能應該只是說行數不是零。 – CWilson

回答

1

我懷疑你的第二和第三個sql語句不是你認爲的那樣,你需要使用一個In子句來包裝你的初始查詢。 DECLARE @ T1作爲表(製造商的varchar(1)) DECLARE @ T2作爲表(MFG VARCHAR(1))

insert into @t1 values ('a'),('b'),('c'),('d'),('f'),('h'),('j'),('l') 
insert into @t2 values ('a'),('c'),('c'),('g'),('g'),('i'),('k'),('l') 
/*query 1*/ 
    select * 
    from @t1 
    where manufacturer in(
    select distinct source.[Manufacturer] 
     from @t1 source 
     left join @t2 u 
     on source.[Manufacturer]=u.mfg 
     where u.mfg is null 
    ) 
/*Query 2*/  
    select * 
    from @t2 
    where mfg in(
    select distinct source.[Manufacturer] 
     from @t1 source 
     left join @t2 u 
     on source.[Manufacturer]=u.mfg 
     where u.mfg is null 
    ) 

查詢1現在返回從@ t1和查詢2不返回任何值的所有值。

+0

謝謝,我懷疑我的第二個和第三個查詢只是調試語句,在生產中絕對沒有用,我認爲這些語句只是用來證明第一個語句沒有按預期工作,因爲證明很重要在這樣的論壇中,我希望只要我的左外部連接正常工作,這些語句就會被刪除 – CWilson

+0

並且非常感謝您輸入。我相信您期望,query1可以正確地處理上述數據。它會返回問題v線索在我的實時數據。所以顯然,錯誤必須在我的數據中,而不是在我的聲明中。 – CWilson