2015-12-23 123 views
0

我有一個MySQL查詢,我需要能夠放入一組幾個序列號,並從數據庫中獲得任何匹配(和相應的數據)。MySQL查詢邏輯幫助

下面的查詢在沒有關於貨運代理ID的最後一個WHERE子句的情況下可以很好地工作,但是一旦我添加它,它就會給我正確的結果集(23條記錄)另外217條(共240條)貨運代理ID爲NULL的數字。我認爲基於我如何編寫它,它應該只顯示結果集中的記錄一次,Freight forwarder是否爲NULL,如果不是,則當貨運代理名稱不爲null時。

這裏的查詢:

SELECT serialnumbers.serialNumber, serialnumbers.stolenItem, 
serialdeals.ProfitCenterNo, 
CASE WHEN (serialdeals.FFIDLookup IS NULL) THEN NULL ELSE freightforwarders.FreightFwderName END, 
serialdeals.ProdIDLookup, 
brands.brandName, stockitems.model, 
serialdeals.EANIDLookup, 
serialdeals.DealCancelled, serialdeals.DateOfDeal, serialdeals.DateEntered, 
wb_users.UserName 
FROM serialnumbers,serialdeals,wb_users,stockitems, brands, freightforwarders 
WHERE serialnumbers.serialNumber IN 
(990003084921374,990003086488406,990003085170252,990003085303135,990003086126782,990003086603822,990003083637393,990003083743738,990003086609910,990003083745402,990003083610325,990003064133834,990003085044226,990003085489520,990003083334256,990003085932289,990003083357117,990003083614855,990003083697348,990003086421183,990003086564933,990003086628977,990002899811317,990002895682506) 
AND ((serialnumbers.DealIDLookup=serialdeals.DealUniqID) 
    OR (serialnumbers.DealIDLookup IS NULL AND serialnumbers.stolenItem=1)) 
AND serialdeals.UserID=wb_users.UserId 
AND serialdeals.ProdIDLookup=stockitems.BaseStockItemId 
AND stockitems.brandID=brands.brandID 
AND (serialdeals.FFIDLookup IS NULL 
    OR serialdeals.FFIDLookup=freightforwarders.FFID) 

這似乎讓我展示多與空貨運代理重複相同的序列號。這些SN都沒有空交易ID和stolenItem = 1。

任何人都可以解釋我的邏輯關閉的位置以及如何修復SQL語句以我想要的方式工作(即顯示所有序列號和交易,即使貨運代理是NULL,但應該只顯示那23個每次一次)

在此先感謝!

+1

瞭解如何使用正確的明確的'加入'語法並嘗試格式化您的查詢。 –

+0

由於行存在,但字段爲空,或者行不在那裏,但您希望匹配(在這種情況下使用LEFT OUTER JOIN),因此該行爲是否爲空ID NULL。 – Kickstart

回答

2

取而代之的

AND (serialdeals.FFIDLookup IS NULL 
    OR serialdeals.FFIDLookup=freightforwarders.FFID) 

你需要LEFT JOIN

FROM serialnumbers,wb_users,stockitems, brands, 
    serialdeals LEFT JOIN freightforwarders ON serialdeals.FFIDLookup=freightforwarders.FFID 

一般是bett4er從WHERE部分移動條件FROM和定義JOINs

+0

這樣做,非常感謝! :) – progwhiz