DPhil
@DPhil
Контент-менеджер

Как убрать лишние значения при JOIN по неуникальным полям?

Если две таблицы джойнятся по уникальному полю, то как правило в результате получается что-то вроде:
id1 name1 id2 name2
1 Petr 1 Petrov
2 Ivan 2 Ivanov

Но если id не уникальный, а одинаковый в обеих таблицах и равен, допустим, единице, то получится что-то вроде:
id1 name1 id2 name2
1 Petr 1 Petrov
1 Petr 1 Ivanov
1 Ivan 1 Ivanov
1 Ivan 1 Petrov

Предположим, что name2 уникальна, таким образом, мы можем понять, что добавление полей состоялось
Не подскажите алгоритм, чтобы получить или
1 Petr 1 Petrov
1 Ivan 1 Ivanov
Или:
1 Petr 1 Ivanov
1 Ivan 1 Petrov

Лучше, конечно, первое)))

SELECT 
           `table1`.*,
            `table2`.*,
       
        FROM `table1` 
        LEFT JOIN `table2` ON `table1`.`id1` = `table2`.`id2 `
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
WITH 
cte1 AS ( SELECT id, name, ROW_NUMBER() OVER (ORDER BY name) rn
          FROM t1 ),
cte2 AS ( SELECT id, name, ROW_NUMBER() OVER (ORDER BY name) rn
          FROM t2 )
SELECT cte1.id id1, cte1.name name1, cte2.id id2, cte2.name name2
FROM cte1
JOIN cte2 USING (rn, id);


https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b5a064...

Хотя, конечно, бред рафинированный. С точки зрения логики.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы