У меня есть база данных 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
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) О таблице оборудования, в прошлом ПК был толькоидентификатор, но мне пришлось включить IPaddress, потому что я выяснил, другое оборудование с тем же идентификатором, но с другим IP-адресом.
2) Теперь я могу сказать, что поставщиком может быть столбец оборудования вместо ассоциативной таблицы.Это только для демонстрационных целей.
Проблема: Как показано выше, по неизвестной причине в таблице equipment_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 join equipment).
Надеюсь, вы поможете мне с этим.Спасибо.