Как получить несопоставимые данные из таблиц в SQL Server - PullRequest
0 голосов
/ 23 ноября 2018

Я пытался получить несопоставимые данные из двух таблиц, сравнивая две таблицы в MS SQL Server и получая данные, которые не соответствуют

для примера

Таблица 1:

id |  user  | password | token | 
1  | Andres | 121212   | e12A1 |  
2  | Louie  | 131312   | e12A2 |
3  | Marcus | 141312   | e22A2 |
4  | Mark   | 141312   | e22A2 |

Таблица 2:

id |  user   | password | token | 
1  | Andres  | 121212   | e12A1 |  
2  | Louie   | 131312   | e12A2 |
6  | Grace   | 151312   | e13A2 |
7  | Sophia  | 159312   | e14A2 |

Ожидаемый результат:

id |  user   | password | token |
3  | Marcus  | 141312   | e22A2 |
4  | Mark    | 141312   | e22A2 |
6  | Grace   | 151312   | e13A2 |
7  | Sophia  | 159312   | e14A2 |

любой запрос (-ы) для решения этой проблемы будет полезен

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Также вы можете использовать WINDOW FUNCTION для достижения ваших требований.Для получения более подробной информации о функции Windows, вы можете обратиться к нему.https://docs.microsoft.com/en-us/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-2017

create table [Table 1]
(id int ,
 [user] varchar(10),
 password varchar(10),
 token varchar(10))

 create table [Table 2]
(id int ,
 [user] varchar(10),
 password varchar(10),
 token varchar(10))

insert into [Table 1] values 
(1,'Andres','121212','e12A1'),
(2,'Louie','131312','e12A2'),
(3,'Marcus','141312','e22A2'),
(4,'Mark','141312','e22A2')

insert into [Table 2] values 
(1,'Andres','121212','e12A1'),
(2,'Louie','131312','e12A2'),
(6,'Grace','151312','e13A2'),
(7,'Sophia','159312','e14A2')

;with cte1 as (
select * from [Table 1]
union all 
select * from [Table 2]
)
,cte2 as (
select *,
count(*)over(partition by id,[user],password,token ) as ct  
from cte1 )
select * from cte2 where ct=1
/*
id          user       password   token      ct
----------- ---------- ---------- ---------- -----------
3           Marcus     141312     e22A2      1
4           Mark       141312     e22A2      1
6           Grace      151312     e13A2      1
7           Sophia     159312     e14A2      1
*/
0 голосов
/ 23 ноября 2018

Вы можете использовать EXCEPT и UNION для сравнения обеих таблиц:

SELECT * FROM 
    (
        SELECT * FROM #Temp1 
        EXCEPT
        SELECT * FROM #Temp2
    ) A
UNION 
SELECT * FROM 
    (
        SELECT * FROM #Temp2
        EXCEPT
        SELECT * FROM #Temp1 
    ) B

или вы можете использовать NOT EXISTS()

SELECT * FROM #Temp1 T1 WHERE NOT EXISTS (SELECT 1 FROM #Temp2 T2 WHERE T1.id=T2.id)
UNION
SELECT * FROM #Temp2 T2 WHERE NOT EXISTS (SELECT 1 FROM #Temp1 T1 WHERE T1.id=T2.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...