#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;