我有以下三张桌子。这只是数据的一小部分,我忽略了大多数不需要查询的行和其他列。如果把完整的表格包括进来会有帮助的话,让我知道,我可以想办法把它们贴出来。
信息通信系统
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)的位置。
任何帮助或洞察力都将不胜感激。谢谢。
发布于 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
发布于 2013-07-12 23:35:31
@Eugene Scray是对的,因为它是你只看到一些价值观的原因。要使列“未分组”,需要将这些列添加到分组子句中。例如:
GROUP BY peripherals.id, infocom.value发布于 2013-07-22 16:26:50
在WHERE子句中,我添加了AND infocoms.itemtype = 'Peripheral',它返回正确的行数以及适当的值。
https://stackoverflow.com/questions/17605290
复制相似问题