使用复合主键的 RIGHT JOIN 不检索所有数据

RIGHT JOIN with composite primary key not retrieving all data

我有一个 MySQL 数据库来存储一些设备 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)关于设备table,以前pk只是id,但是我不得不加上ipaddress,因为我发现不同的设备id相同但ip地址不同。

2) 我现在 vendor 可以是设备列而不是关联 table。仅供演示之用。

问题: 如上图,不知为何,equipment_vendortable中有旧记录,但设备table中已无相关记录(如上面id=4的记录) , 设备中没有 2222-10.255.99.20 table)。 然后我需要在相同情况下取回所有设备。我做到了:

SELECT * FROM equipment AS a
RIGHT JOIN equipment_vendor AS b ON a.id = b.equipment_id AND a.ipaddress = b.equipment_ipaddress

这只给我显示了"existent"个装备,但我需要的恰恰相反,我需要的是不存在的。我认为 RIGHT JOIN 函数就是为了做到这一点,即使左边没有关联的记录,也可以从右边 table 获取所有内容。我错了吗? 我尝试了每种类型的连接并尝试颠倒顺序(equipment_vendor 连接设备)。

我希望你能帮助我。谢谢。

尝试

NOT IN

SELECT ev.equipment_id, ev.equipment_ipaddress FROM equipment_vendor ev WHERE ev.equipment_ipaddress NOT IN (SELECT eq.ipaddress FROM equipment eq);

使用 NOT EXISTS

SELECT * 
FROM equipment_vendor ev 
WHERE NOT EXISTS(SELECT 1 FROM equipment eq 
                 WHERE eq.id = ev.equipment_id
                 AND eq.ipaddress = ev.equipment_ipaddress)