1

我有以下 3 张桌子。这只是数据的一小部分,我省略了大多数行和其他我不查询的列。如果包含完整的表格会有所帮助,请告诉我,我可以弄清楚如何发布它们。

信息通信

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      

地点

id  name    
34  Anaheim
35  Kirkland  
36  Palm Springs  
37  Tacoma  

外围设备

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

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

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)。

任何帮助或见解将不胜感激。谢谢。

4

3 回答 3

1

评论(因为我没有声誉):“值”和“名称”应该用反引号(``)括起来,因为它们是保留字。

但是仔细看一下你的代码,我发现你是按 location.name 分组的,即使当你做一个重复的许多值JOIN ON peripherals.locations_id = locations.id.

之后发生的事情是,GROUP其余的语句由 location.name 给出所有没有与 peripherals.locations_id 关联的位置名称的位置的第一个结果

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

于 2013-07-11T23:41:44.250 回答
0

@Eugene Scray 关于 GROUP BY 是您只看到一些值的原因是正确的。要保持列“未分组”,您需要将这些列添加到 GROUPING 子句中。例如:

GROUP BY peripherals.id, infocom.value
于 2013-07-12T23:35:31.593 回答
0

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

于 2013-07-22T16:26:50.063 回答