Sql server 查找两个表之间的增量
我有两个表,我们称它们为表A和表B。两个表的大小不同,但主键(ID)相同。变量字段为(名称)。我想从表B返回以下行:Sql server 查找两个表之间的增量,sql-server,tsql,Sql Server,Tsql,我有两个表,我们称它们为表A和表B。两个表的大小不同,但主键(ID)相同。变量字段为(名称)。我想从表B返回以下行: 数据发生了变化 以前没有数据 每次执行SQL时,返回的数据将有一个附加的列标记为comments,其值设置为高于。我已经在下面编写了T-SQL,但是有更好的方法吗 SELECT [ID] ,[Name] ,'Data did not exist before' AS [Comment] FROM TABLENAMEB WHERE [ID] NOT IN (SELECT [ID]
SELECT [ID]
,[Name]
,'Data did not exist before' AS [Comment]
FROM TABLENAMEB
WHERE [ID] NOT IN (SELECT [ID] FROM #TABLENAMEA)
UNION
SELECT B.[ID]
,B.[Name]
,'Data has changed' AS [Comment]
FROM TABLENAMEB B
LEFT JOIN TABLENAMEA A ON B.[ID] = A.[ID]
WHERE A.[Name] != B.[Name]
您可能可以使用left join和
case
获得相同的结果:
SELECT [ID]
,[Name]
,CASE
WHEN A.[Name] IS NULL THEN -- Assuming `Name` in table a is not nullable.
'Data did not exist before'
WHEN B.[Name] != A.[Name THEN
'Data has changed'
ELSE
''
END As [Comment]
FROM TABLENAMEB As B
LEFT JOIN #TABLENAMEA As A ON B.[ID] = A.[ID]
您可能可以使用left join和
case
获得相同的结果:
SELECT [ID]
,[Name]
,CASE
WHEN A.[Name] IS NULL THEN -- Assuming `Name` in table a is not nullable.
'Data did not exist before'
WHEN B.[Name] != A.[Name THEN
'Data has changed'
ELSE
''
END As [Comment]
FROM TABLENAMEB As B
LEFT JOIN #TABLENAMEA As A ON B.[ID] = A.[ID]
大概是这样的:
DECLARE @tblA TABLE(ID INT, Name VARCHAR(100));
INSERT INTO @tblA VALUES(1,'test1'),(2,'test2'),(4,'test4');
DECLARE @tblB TABLE(ID INT, Name VARCHAR(100));
INSERT INTO @tblB VALUES(2,'test2'),(3,'test3'),(4,'different');
SELECT CASE WHEN A.ID IS NULL THEN 'missing in A'
WHEN B.ID IS NULL THEN 'missing in B'
WHEN A.Name<>B.Name THEN 'different'
ELSE 'okay' END AS Comment
,*
FROM @tblA AS A
FULL OUTER JOIN @tblB AS B ON A.ID=B.ID
大概是这样的:
DECLARE @tblA TABLE(ID INT, Name VARCHAR(100));
INSERT INTO @tblA VALUES(1,'test1'),(2,'test2'),(4,'test4');
DECLARE @tblB TABLE(ID INT, Name VARCHAR(100));
INSERT INTO @tblB VALUES(2,'test2'),(3,'test3'),(4,'different');
SELECT CASE WHEN A.ID IS NULL THEN 'missing in A'
WHEN B.ID IS NULL THEN 'missing in B'
WHEN A.Name<>B.Name THEN 'different'
ELSE 'okay' END AS Comment
,*
FROM @tblA AS A
FULL OUTER JOIN @tblB AS B ON A.ID=B.ID
编辑:我刚刚注意到你正在使用2008。以下功能没有任何用处 您使用的是T-SQL,因此您使用的是SQL Server。查看这两个专门为回答您的问题而设计的功能之一:
编辑:我刚刚注意到你正在使用2008。以下功能没有任何用处 您使用的是T-SQL,因此您使用的是SQL Server。查看这两个专门为回答您的问题而设计的功能之一: