我有一个MySQL查询,在该查询中,我需要能够输入一组几个序列号,并从数据库中获取任何匹配的(以及相应的数据)。
下面的查询完全没有关于货运代理ID的最后WHERE子句,但是一旦我添加它,它就会给我正确的结果集(23条记录),再加上217个相同的序列号(总共240条),并且货运代理ID为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)它似乎不断向我展示更多的相同的序列号重复与零货运代理。这些SNs中没有一个具有空交易ID和stolenItem=1。
有人能解释一下我的逻辑在哪里,以及如何按照我想要的方式修正SQL语句(即显示所有序列号和交易,即使货运代理为空,但应该是每一次只显示23次)。
提前感谢!
发布于 2015-12-23 12:49:57
而不是
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通常情况下,bett4er可以将条件从WHERE部分移到FROM并定义JOINs
https://stackoverflow.com/questions/34435673
复制相似问题