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