簡體   English   中英

MySQL查詢邏輯協助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM