Как удалить повторяющиеся / инвертированные строки из ВНУТРЕННЕГО СОЕДИНЕНИЯ

#mysql #sql #inner-join

#mysql #sql #внутреннее соединение

Вопрос:

Я использую SQL для извлечения из таблицы, я также использую ВНУТРЕННЕЕ СОЕДИНЕНИЕ для выбора строк со связующими значениями / столбцами и добавления их в одну большую строку.

Таблица ниже:

    | name    |   value    |   num |
   | James   |   HEX124   |   1   |
   | James   |   JEU836   |   4   |
  

Теперь я объединяю эти две строки в одну строку, используя этот SQL:

 SELECT  a.name, a.value, a.num, b.name, b.value, b.num
FROM MY_TABLE a
INNER JOIN MY_TABLE b ON a.name = b.name //Inner joining where the name is the same
WHERE a.value <> b.value // where the values are NO the same
  

Результат:

    | a.name  |   a.value  | a.num | b.name  |   b.value  | b.num |
   | James   |   HEX124   |   1   |  James  |   JEU836   |   4   |
   | James   |   JEU836   |   4   |  James  |   HEX124   |   1   |
  

Как вы можете видеть в результате, это работает, но возвращает все возможные результаты, я хочу вернуть только одну из этих строк, поскольку она почти дублировала / инвертировала их.

Возможно, вернув только первую строку, ГДЕ a.name является ли дубликат?

Желаемый результат:

    | a.name  |   a.value  | a.num | b.name  |   b.value  | b.num |
   | James   |   HEX124   |   1   |  James  |   JEU836   |   4   |
  

Спасибо

Комментарии:

1. Вы должны гарантировать строго 2 дубликата by name . Или определите вывод более точно.

Ответ №1:

Просто измените:

 a.value <> b.value
  

Для:

 a.value < b.value
  

Я бы поставил условие в ON предложении следующим образом:

 SELECT a.name, a.value, a.num, b.name, b.value, b.num
FROM MY_TABLE a INNER JOIN
     MY_TABLE b
     ON a.name = b.name AND a.value < b.value;