繁体   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-2025 STACKOOM.COM