我有一個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個每次一次)
在此先感謝!
瞭解如何使用正確的明確的'加入'語法並嘗試格式化您的查詢。 –
由於行存在,但字段爲空,或者行不在那裏,但您希望匹配(在這種情況下使用LEFT OUTER JOIN),因此該行爲是否爲空ID NULL。 – Kickstart