sql запрос, дающий повторяющиеся результаты - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть две таблицы, и я хочу получить выбранные столбцы из таблиц. таблица 1 - sfpinventoryinfo, а таблица 2 - opticalportinfo. Оба имеют общий NEID.

SELECT 
  sfpinventoryinfo.NEID, 
  sfpinventoryinfo.SlotNumber, 
  sfpinventoryinfo.PortNo, 
  sfpinventoryinfo.PortType,
  sfpinventoryinfo.`Type`, 
  sfpinventoryinfo.SN, 
  sfpinventoryinfo.GenDes,
  sfpinventoryinfo.ApplicationCode,
  opticalportinfo.ChannelFrequency
FROM
   sfpinventoryinfo 
   JOIN opticalportinfo ON sfpinventoryinfo.NEID = opticalportinfo.NEID;

Но я получаю странный результат

enter image description here

Как показывает приведенный выше результат, слот № 4 должен иметь только 1 запись для порта вместо 5

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вероятно, у вашего opticalportinfo есть шесть строк со значением 13 в NEID. Итак, ваше объединение создает все шесть строк в вашем наборе результатов.

Трудно угадать «правильный» способ выбрать, какую из этих шести строк использовать, не зная больше о вашем приложении. Вы можете решить проблему с помощью SELECT DISTINCT, если необходимо. Но это взлом.

0 голосов
/ 05 апреля 2020

У вас явно есть дубликаты в одной или обеих таблицах. В данных вашего примера вся строка выглядит дублированной, поэтому вы можете использовать select distinct, чтобы не повторять целые строки:

SELECT DISTINCT i.NEID, i.SlotNumber, i.PortNo, i.PortType, i.`Type`, i.SN, 
       i.GenDes, i.ApplicationCode, oi.ChannelFrequency
FROM sfpinventoryinfo i JOIN
     opticalportinfo op
     ON i.NEID = oi.NEID;

Или, возможно, GROUP BY:

SELECT i.NEID, i.SlotNumber, i.PortNo, i.PortType, i.`Type`, i.SN, 
       i.GenDes, i.ApplicationCode, MAX(oi.ChannelFrequency)
FROM sfpinventoryinfo i JOIN
     opticalportinfo op
     ON i.NEID = oi.NEID
GROUP BY i.NEID, i.SlotNumber, i.PortNo, i.PortType, i.`Type`, i.SN, 
         i.GenDes, i.ApplicationCode;

Это сказал: Вы действительно должны понять, почему есть дубликаты, и скорректировать свой запрос или исправить ваши данные.

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