Я пытался создать запрос 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, это не привело к повторению результатов. Затем я включил отдельное ключевое слово, и оно внезапно снова стало нормальным.
Как только я добавляю поле из третьей таблицы к первому оператору select, он снова показывает много дубликатов. (Portdetail.name).
Я нашел вопросы по этому поводу, которые были решены с помощью отдельного ключевого слова или путем уточнения выбора 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.
EDIT:
Чтобы уточнить. Устройство перечисляет устройства, такие как коммутаторы. Затем я хочу взять IP-адрес коммутатора (device.ip и найти некоторые подробности об этом из таблицы вещей. Таблица вещей - это таблица, содержащая сведения о коммутаторах.
Теперь таблица portdetail содержит имя интерфейсов (Fa0 / 1, Fa0 / 2 и т. Д.) Против portdetail.poll_ip, который является IP-адресом коммутатора, поэтому я хочу получить все имена интерфейсов для конкретного коммутатора. Надеюсь, это будет немного понятнее (я не назвал таблицы базы данных и не могу изменить их на данном этапе)