首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询逻辑辅助

MySQL查询逻辑辅助
EN

Stack Overflow用户
提问于 2015-12-23 12:24:42
回答 1查看 52关注 0票数 0

我有一个MySQL查询,在该查询中,我需要能够输入一组几个序列号,并从数据库中获取任何匹配的(以及相应的数据)。

下面的查询完全没有关于货运代理ID的最后WHERE子句,但是一旦我添加它,它就会给我正确的结果集(23条记录),再加上217个相同的序列号(总共240条),并且货运代理ID为NULL。我认为,根据我如何编写它,它应该只显示结果集中的那些记录一次,无论货运转发器是空还是如果不是,那么货运转发器的名字,当它是非空的。

以下是查询:

代码语言:javascript
复制
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次)。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-23 12:49:57

而不是

代码语言:javascript
复制
AND ( serialdeals.FFIDLookup IS NULL 
   OR serialdeals.FFIDLookup=freightforwarders.FFID)

你需要左加入

代码语言:javascript
复制
FROM serialnumbers,wb_users,stockitems, brands, 
     serialdeals LEFT JOIN freightforwarders ON serialdeals.FFIDLookup=freightforwarders.FFID

通常情况下,bett4er可以将条件从WHERE部分移到FROM并定义JOINs

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34435673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档