2015-08-21 2 views
0

Привет У меня есть сомнения в SQL сервереКак получить уникальные записи на основе 2 таблиц?

Table : emp 

    Id | Desc 
    1 | abc 
    2 | def 
    3 | har 

table2: emp1

Id | Desc 
3 | Har 
4 | jai 
4 | jai 
5 | uou 
6 | uni 
6 | udkey 
2 | Jainiu 

на основе приведенной выше таблицы я хочу вывода, как показано ниже

ID | Desc 
1 | abc 
2 | def 
3 | har 
4 | jai 
5 | uou 
6 | uni 

Я попытался, как показано ниже

select id, desc from emp 
union 
select * from (select *,row_number()over(partition by id)as rn from emp1) 
where rn=1 

после выполнения этого запроса я получил сообщение об ошибке, как показано ниже

Msg 205, Level 16, State 1, Line 2
Все запросы в сочетании с использованием UNION, INTERSECT или КРОМЕ оператор должен иметь равное количество выражений в их целевые списки.

Это говорит выше. Первый запрос - это 2 столбца и 2 запроса - это 3 столбца, этот процесс , как мы избегаем этого столбца rn. пожалуйста, скажите мне, как написать запрос для того чтобы достигнуть этой задачи в SQL сервере

+0

почему 'select id, desc from emp union select id, desc from emp1' ?? потому что в таблице emp1 есть новый столбец rn. – Wanderer

+0

Также нет 'ORDER BY' в' ROW_NUMBER() ' –

+0

@srinivas, см. Ниже вывод будет точно соответствовать выходу – mohan111

ответ

1

Использование:

SELECT id, 
     desc 
FROM emp 
UNION 
SELECT id, 
     desc 
FROM emp1 

Union будет автоматически делать distinct и sort его в правильном порядке, вам не нужно ничего делать , никакие Windwos функции не требуется

Результат:

ID | Desc 
1 | abc 
2 | def 
2 | Jainiu 
3 | har 
4 | jai 
5 | uou 
6 | uni 
6 | udkey 

Если вы хотите удалить udkey и Jainiu пожалуйста упоминает Logi выбирать между def и Jainiu и так далее ...

0

, используя Союз или Distinct мы можем reomve дубликатов и row_number мы можем получить выход и в союзе должны иметь одинаковое число столбцов DECLARE @emp ТАБЛИЦА ([Id] int, [Desc] varchar (3)) ;

INSERT INTO @emp 
    ([Id], [Desc]) 
VALUES 
    (1, 'abc'), 
    (2, 'def'), 
    (3, 'har') 


DECLARE @emp1 TABLE 

    ([Id] int, [Desc] varchar(6)) 


INSERT INTO @emp1 
    ([Id], [Desc]) 
VALUES 
    (3, 'Har'), 
    (4, 'jai'), 
    (4, 'jai'), 
    (5, 'uou'), 
    (6, 'uni'), 
    (6, 'udkey'), 
    (2, 'Jainiu') 


    ;with CTE AS (

     select 
id, 
[Desc], 
Row_NUMBER()OVER(PARTITION BY ID ORDER BY ID,[Desc]DESC)RN 
     from 

     (select distinct id,[Desc] from @EMP 
    UNION ALL 
    select distinct id,[Desc] from @EMP1)T) 

    select id,[Desc] from CTE 
    WHERE RN = 1 
Смежные вопросы