【发布时间】:2019-03-18 06:03:56
【问题描述】:
我正在使用 4 个表 - 项目、主机、历史记录、映射
物品
hostid,itemid,name,valuemapid
10761,304827,Phone 33 44 55 66 77 88:Model of the Phone,68
10761,304827,Phone 33 44 55 66 77 88:Model of the Phone,68
10761,304827,Phone 33 44 55 66 77 88:Model of the Phone,68
10761,304828,Phone 33 44 55 66 88 88:Model of the Phone,68
10761,304828,Phone 33 44 55 66 88 88:Model of the Phone,68
10761,304828,Phone 33 44 55 66 88 88:Model of the Phone,68
10761,304829,Phone 33 44 55 77 77 88:Model of the Phone,68
10761,304829,Phone 33 44 55 77 77 88:Model of the Phone,68
10761,304820,Phone 33 44 44 66 77 88:Model of the Phone,72
10761,304820,Phone 33 44 44 66 77 88:Model of the Phone,72
主机
hostid,name
10761,CUCM2
历史
itemid,value
304827,109
304828,109
304829,109
304829.110
映射
valuemapid,value,newvalue
68,109,Cisco 7841
72,110,Cisco 7940
我写了一个查询来给我手机的型号和该型号的数量,但它正在计算重复项。有人告诉我我需要添加一个 INNER JOIN,但我不知道该怎么做。有人可以帮我更改我的查询以对“Items”表进行 INNER JOIN,以便删除所有重复的 ItemID。
SELECT map.newvalue as 'Model of Phone', Count(*) as 'Number of Phones'
FROM items i, hosts h, history huint, mappings map
WHERE h.hostid=i.hostid AND h.name='$Hosts' AND i.itemid=huint.itemid AND i.valuemapid=map.valuemapid AND huint.value=map.value AND i.name LIKE '%Model of the Phone'
GROUP BY map.newvalue
LIMIT 100;
返回
Model of Phone, Number of Phones
Cisco 7841, 8
Cisco 7940, 2
谢谢!
** UPDATE ** 使用 LEFT JOIN 但不知道如何使用 DISTINCT
SELECT map.newvalue as 'Model of Phone', Count(*) as 'Number of Phones'
FROM hosts h
LEFT JOIN items i
ON h.hostid=i.hostid
LEFT JOIN history_uint huint
ON i.itemid=huint.itemid
LEFT JOIN mappings map
ON i.valuemapid=map.valuemapid
WHERE h.name='$Hosts' AND huint.value=map.value AND i.name LIKE '%Model of the Phone'
GROUP BY map.newvalue
ORDER BY 'Item Name' DESC
LIMIT 100;
【问题讨论】:
-
为什么不阅读关于 JOIN 的文章,然后再回复我们
-
嘿草莓...自从你建议以来,我整个周末都在阅读 JOINS,并且一直在尝试弄清楚如何使用它们,但我仍然卡住了。我尝试了 w3school、sqlcourse,只是在这里阅读了其他答案,但我似乎无法将我的查询转换为使用 JOIN 的查询。
-
连接表确实没有太多意义,您不能从中选择任何列 - 尽管在这种情况下 huint 和 i 都呈现为 INNER JOIN