我有以下3个表格。这只是数据的一小部分,我遗漏了大多数行和其他我不反对的列。如果包括完整的表格会有帮助,请告诉我,我可以弄清楚如何发布它们。
infocoms
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)。
非常感谢任何帮助或见解。感谢。
答案 0 :(得分:1)
评论(因为我没有声誉):“值”和“名称”应该包含在后面的标记中(``),因为它们是保留字。
但仔细查看你的代码我发现你按location.name进行分组,即使你执行JOIN ON peripherals.locations_id = locations.id.
之后会发生的是,GROUP
其他语句通过location.name给出了没有与peripheral.locations_id关联的位置名称的所有位置的第一个结果
尽量不要使用GROUPING BY
,看看你得到了什么。为了获得您想要的结果,您需要省略JOIN ON peripherals.locations_id = locations.id或将每个peripials.locations_id关联到适当的locations.id
答案 1 :(得分:0)
@Eugene Scray对于GROUP BY是正确的,因为你只看到一些值。 要使列“未分组”,您需要将这些列添加到GROUPING子句中。例如:
GROUP BY peripherals.id, infocom.value
答案 2 :(得分:0)
在WHERE
子句中,我添加了AND infocoms.itemtype = 'Peripheral'
,它返回了正确的行数以及相应的值。