База данных SQLite3 - запрос SELECT, возвращающий дубликаты - PullRequest
1 голос
/ 10 октября 2011

Я пытался создать запрос 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-адресом коммутатора, поэтому я хочу получить все имена интерфейсов для конкретного коммутатора. Надеюсь, это будет немного понятнее (я не назвал таблицы базы данных и не могу изменить их на данном этапе)

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Хорошо, поэтому благодаря умному телу в канале IRC они предложили добавить второе предложение WHERE, поскольку в настоящее время я определяю только по одной таблице. После того, как я добавил пару дополнительных предложений WHERE, чтобы идентифицировать поля между таблицами, все это работало отлично. (Например, где TABLE.FIELD == TABLE2.OTHERFIELD) Спасибо за предложения

0 голосов
/ 10 октября 2011

Не является ли poll_ip уникальным в таблице portdetail, возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...