【发布时间】:2018-10-06 13:04:36
【问题描述】:
我有一个 MySQL 数据库来存储一些设备 IP 地址、供应商和服务状态,结构如下(为了说明而简化):
- 表设备(id、ipaddress)作为主键
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
- 表 equipment_vendor
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) 我现在那个 vendor 可以是一列设备而不是一个关联表。仅用于演示目的。
问题: 如上图,不知什么原因,device_vendor 表中存在旧记录,但设备表中没有相关记录(如上面记录 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 函数旨在做到这一点,即使左侧表中没有关联记录,也可以从右侧表中获取所有内容。我错了吗? 我尝试了每种类型的连接并尝试反转顺序(equipment_vendor 连接设备)。
我希望你能帮助我。谢谢。
【问题讨论】:
标签: mysql composite-primary-key right-join