首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有两个联接的MySQL查询不返回预期结果

带有两个联接的MySQL查询不返回预期结果
EN

Stack Overflow用户
提问于 2013-07-11 23:35:07
回答 3查看 93关注 0票数 1

我有以下三张桌子。这只是数据的一小部分,我忽略了大多数不需要查询的行和其他列。如果把完整的表格包括进来会有帮助的话,让我知道,我可以想办法把它们贴出来。

信息通信系统

代码语言:javascript
复制
id    items_id  itemtype         value      
1735  21        Software         0.0000     
1736  22        Software         0.0000     
1739  21        Peripheral       151.2500   
1741  23        Peripheral       150.5000   
1742  24        Peripheral       0.0000     
1743  25        Peripheral       0.0000      

地点

代码语言:javascript
复制
id  name    
34  Anaheim
35  Kirkland  
36  Palm Springs  
37  Tacoma  

外围设备

代码语言:javascript
复制
id  name                                                          locations_id  
11  Logitech USB Wheel Mouse                                      0             
12  Samsung Slate Dock                                            17            
21  USB Scan Gun with Stand                                       34            
23  USB Scan Gun with Stand                                       63            
24  USB Scan Gun with Stand                                       45            
26  USB Scan Gun with Stand                                       39

我正在对这些表运行以下查询:

代码语言:javascript
复制
SELECT peripherals.name, infocoms.value, locations.name AS Branch
FROM peripherals
JOIN infocoms ON peripherals.id = infocoms.items_id
JOIN locations ON peripherals.locations_id = locations.id
WHERE (peripherals.name = 'USB Scan Gun with Stand'
AND peripherals.locations_id != '0')
GROUP BY peripherals.id ORDER BY locations.name ASC

我得到了返回的正确行数,但是值显示为0.0000,而不是实际金额(151.25和150.50)的位置。

任何帮助或洞察力都将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-07-11 23:41:44

评论(因为我没有声誉):"value“和"name”应该用倒计时()括起来,因为它们是保留词。

但是仔细看看您的代码,我发现您正在按location.name进行分组,即使在执行JOIN ON peripherals.locations_id = locations.id.时许多值都是重复的。

之后发生的事情是,您可以通过GROUP location.name对其余的语句提供所有没有与peripherals.locations_id相关联的位置名称的位置的第一个结果。

尽量不要使用GROUPING BY,看看你得到了什么。为了获得您想要的结果,您需要省略peripherals.locations_id = locations.id上的联接,或者将每个peripials.locations_id关联到适当的locations.id

票数 1
EN

Stack Overflow用户

发布于 2013-07-12 23:35:31

@Eugene Scray是对的,因为它是你只看到一些价值观的原因。要使列“未分组”,需要将这些列添加到分组子句中。例如:

代码语言:javascript
复制
GROUP BY peripherals.id, infocom.value
票数 0
EN

Stack Overflow用户

发布于 2013-07-22 16:26:50

WHERE子句中,我添加了AND infocoms.itemtype = 'Peripheral',它返回正确的行数以及适当的值。

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

https://stackoverflow.com/questions/17605290

复制
相关文章

相似问题

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