Как объединить две таблицы по разным значениям столбца? - PullRequest
2 голосов
/ 27 января 2020
SELECT table1.*
    ,address
    ,job
FROM table1
JOIN table2 ON table2.name = table1.name

Приведенный выше запрос также возвращает результат для повторяющихся значений name. Как можно преобразовать запрос, чтобы получить только одно значение для различных значений столбца name?

Я использую SQL Сервер

enter image description here

enter image description here

enter image description here

Ответы [ 2 ]

3 голосов
/ 27 января 2020

Вы можете легко выполнить sh это с помощью row_number оконной функции. Смотрите запрос ниже:

select t1.id, t1.name, t1.pets, t2.address, t2.job
from (
    select *,
           row_number() over (partition by [name] order by id) rn 
    from Table1
) t1 
join table2 t2 on t1.name = t2.name
where t1.rn = 1
2 голосов
/ 27 января 2020

Я бы порекомендовал боковое соединение - apply - для этой цели:

SELECT t1.*, t2.address, t2.job
FROM table2 t2 CROSS APPLY
     (SELECT t1.*
      FROM table1 t1
      WHERE t2.name = t1.name
     ) t1;

Обычно подзапрос будет иметь ORDER BY для указания порядка. В противном случае результат будет неопределенным.

Это часто быстрее, чем использование оконных функций для этой цели.

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