SQLite3数据库 - SELECT请求返回重复项

时间:2011-10-10 14:35:02

标签: sql database sqlite

我一直在尝试构建一个SQL查询来返回三个表之间的匹配。

SELECT DISTINCT thing.ip, thing.mac, 
    thing.vlan, thing.port 
FROM device 
INNER JOIN thing ON device.ip=thing.switch 
INNER JOIN portdetail ON device.ip=portdeail.poll_ip 
WHERE device.id="abc"

它最初工作得很好,直到我添加第二个INNER JOIN,这导致重复结果没有结束。然后我包含了distinct关键字,它突然恢复正常了。 只要我将第三个表中的字段添加到第一个select语句,它就会再次显示许多重复项。 (portdetail.name)。

我已经找到了有关这方面的问题,这些问题已通过使用distinct关键字或通过改进ON选择来解决。这些似乎都没有帮助(或者至少他们在添加最后一个字段之前做了)

SELECT DISTINCT thing.ip, thing.mac, 
    thing.vlan, thing.port, portdetail.name
FROM device 
INNER JOIN thing ON device.ip=thing.switch 
INNER JOIN portdetail ON device.ip=portdeail.poll_ip 
WHERE device.id="abc"

它在SQLite 3数据库上运行。

编辑:

澄清。设备列出交换机等设备。然后我想拿一个开关的IP(device.ip并从thing表中找到它的一些细节。这个东西表是一个包含交换机细节的表。

现在portdetail表保存了与portdetail.poll_ip相对应的接口名称(Fa0 / 1,Fa0 / 2等),这是交换机的IP,因此我想提取特定交换机的所有接口名称。我希望这一点稍微清楚一些(我没有命名数据库表,也没有权力在这个阶段改变它们)

2 个答案:

答案 0 :(得分:1)

好的,所以感谢IRC频道中的一个聪明的人,他们建议添加第二个WHERE子句,因为目前我只是从一个表中识别。 一旦我添加了几个额外的WHERE子句来识别表之间的字段,它就完美地工作了。 (例如,WHERE TABLE.FIELD == TABLE2.OTHERFIELD) 感谢您的建议

答案 1 :(得分:0)

poll_ip表中的portdetail不是唯一的吗?