2013-08-05 121 views
0

在今天的查詢中,我想從兩個不同的表中選擇具有特定公司名稱的行。我做到了像在WHERE中使用OR會產生意想不到的結果

​​

首先,它花了20分鐘來運行,這是奇怪的,因爲如果我只對一列過濾花了大約10秒。其次,當它完成時,某些行中某些列的值爲NULL,因爲我知道這些記錄中的數據庫中存在值。那麼這裏發生了什麼?爲什麼SQL不能對兩個表中的兩列執行OR操作?

(我工作圍繞它與UNION - 我跑它C.COMPANY LIKE '%ACME%',並聯合在一起成爲一個SELECT... WHERE N.COMPANY LIKE '%ACME%'

+1

你是什麼意思‘的價值觀爲一些行是NULL’?顯然你正在做一個你沒有向我們展示的聯合,你做錯了! –

+1

我們需要完整的查詢(或者縮小版本,重現您的問題),一些樣本輸入和輸出以及實際輸出。 – Dukeling

+0

我清理了文本以闡明我的意思。整個查詢很大,有大約5個連接。它工作正常,沒有複合OR在WHERE。 – user2129949

回答

0

這是不好的做法,混淆了JOIN,在一個單一的查詢WHERE關鍵字,因爲WHERE是幕後有INNER JOIN。根據我的經驗,這往往會導致不受控制的聯接,這是不需要的。

嘗試把你的LIKE的後直接加入這樣的對應表:

... 
JOIN N ON <Your existing relationship> AND N.COMPANY LIKE '%ACME%' 
... 
JOIN C ON <Your existing relationship> AND C.COMPANY LIKE '%ACME%' 
... 
相關問題