2017-01-09 70 views
0

我有三個字段的表,看起來像這樣...........查詢似乎並沒有產生正確的結果

tblValues 

NameFrom   NameTo   Difference 
abbbb    arrrr    16 
acccc    agggg    20 
adddd    annnn    17 

我的查詢看起來像這樣...

Select 'From' = tblValues.NameFrom, 
     'To' = tblValues.NameTo, 
     TblValues.Difference, 
     'Other' = x1.Difference 
from tblValues 
    LEFT JOIN tblValues X1 
    ON tblValues.NameFrom = X1.NameTo 
    AND tblValues.NameTo = X1.NameFrom 
WHERE tblValues.NameFrom Like '%a%' OR tblValues.NameTo Like '%a%' 
ORDER BY tblValues.NameFrom, tblValues.NameTo 

我讓用戶在這種情況下搜索文本值'a'。我有大約30000個值不被任何人編輯/更新。他們已經進入這張桌子並且一直如此。

的數據看起來是這樣的....

From  To   Difference  Other 
abbbb  arrrr  16    16 
....  .... 
'Same for all the values - or at least that's what it should be! 

我的問題是,當我運行此查詢有一些記錄,而其他= NULL - 即使有差別的值。任何想法爲什麼?

+0

我知道這可以簡單地做另一種方式 - 但這個查詢是由別人寫的,雖然我不想改變它 - 我想知道爲什麼它不會產生有效數據(NULL值) – BobSki

回答

2

你與該行採摘other

LEFT JOIN tblValues X1 ON tblValues.NameFrom = X1.NameTo 

然後顯示它:

'Other' = x1.Difference 

A LEFT JOIN表示:加入此表。如果沒有連接記錄返回NULL。如果有一個(或者如果有多個),則返回所有這些。

您的查詢,在那裏你將加入同一個表作爲源表,這意味着:

每當有沒有記錄發現,在tblValues.NameFrom = X1.NameTo這一領域other將保持空...爲什麼發生這種情況無人能從外部告訴你...

1

如果表tblValues NameFrom沒有對應的NameTo值,則來自X1表的結果爲NULL。左連接包括來自tblValues的所有記錄,即使在X1中沒有相應的匹配。使用INNER JOIN:

Select 'From' = tblValues.NameFrom, 'To' = tblValues.NameTo, TblValues.Difference, 'Other' = x1.Difference 
from tblValues 
INNER JOIN tblValues X1 ON tblValues.NameFrom = X1.NameTo 
AND tblValues.NameTo = X1.NameFrom 
WHERE tblValues.NameFrom Like '%a%' OR tblValues.NameTo Like '%a%' 
ORDER BY tblValues.NameFrom, tblValues.NameTo