[英]MySQL query logic assistance
我有一個MySQL查詢,我需要在其中輸入幾個序列號,並從數據庫中獲取任何匹配的(和相應的數據)。
以下查詢在沒有關於貨運代理ID的最后一個WHERE子句的情況下可以完美地工作,但是一旦添加它,它就會為我提供正確的結果集(23個記錄)加上217個(含運費的)相同序列號的總數(共240個)轉發器ID為NULL。 根據我的寫法,我認為它應該只顯示結果集中的那些記錄一次,無論貨運代理為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)
似乎不斷向我顯示更多使用NULL貨運代理重復的相同序列號。 這些SN均未使用NULL交易ID和stolenItem = 1。
誰能解釋我的邏輯在哪里關閉以及如何按照我希望的方式來解決SQL語句的工作(即即使貨運代理為NULL,也要顯示所有序列號和交易,但應該只顯示23個,每次顯示一次)
提前致謝!
而不是
AND ( serialdeals.FFIDLookup IS NULL
OR serialdeals.FFIDLookup=freightforwarders.FFID)
您需要左加入
FROM serialnumbers,wb_users,stockitems, brands,
serialdeals LEFT JOIN freightforwarders ON serialdeals.FFIDLookup=freightforwarders.FFID
通常,最好將條件從“ WHERE
部分移至“ FROM
並定義JOINs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.