我有一个mysql数据库来存储一些设备ip地址、供应商和服务状态,其结构如下(为了便于说明而简化):
表设备(id、IP地址)作为主键
id ipaddress name
1234 10.20.30.40 NY Router
1234 10.31.41.51 DC Router
2222 10.255.99.22 CA Router
表供应商
id name
1 Cisco
2 Juniper
3 Huawei
表设备供应商
id equipment_id equipment_ipaddress vendor_id
1 1234 10.20.30.40 1
2 1234 10.31.41.51 1
3 2222 10.255.99.22 2
4 2222 10.255.99.20 2
笔记:
1) 关于设备表,过去的pk只是id,但是我必须包含ipaddress,因为我发现不同的设备具有相同的id但是不同的ip地址。
2) 我现在知道供应商可以是一列设备,而不是一个关联表。这只是为了说明目的。
问题:如上所示,由于某种未知原因,设备\供应商表中存在旧记录,但设备表中不再有相关记录(如上面的记录id=4,设备表中没有2222-10.255.99.20)。然后我需要在同样的情况下取回所有的设备。我做到了:
SELECT * FROM equipment AS a
RIGHT JOIN equipment_vendor AS b ON a.id = b.equipment_id AND a.ipaddress = b.equipment_ipaddress
这只向我展示了“存在的”设备,但我需要的恰恰相反,我需要的是不存在的设备。我以为right join函数就是要这样做的,从右边的表中获取所有数据,即使左边的表中没有相关的记录。我错了吗?我尝试了各种类型的连接,并尝试反转顺序(设备\供应商连接设备)。
我希望你能帮我。谢谢。
2条答案
按热度按时间w51jfk4q1#
尝试
歪投球
x759pob22#
使用不存在