合并SQL Server 2008 R2中的两个表以根据条件

时间:2015-04-23 10:14:27

标签: sql-server

表1

ID  Date    Area     message
111 2015-04-23  59   testing
222 2015-04-23  59
333 2015-04-23  97

表2

ID  Date    Area    firstname   lastname
111 2015-04-23  67   doe        K
222 2015-04-23  67   jil        M
333 2015-04-23  97   scot       P

我有两个表我希望它首先检查表1是否存在该区域的id然后它必须从表1中获取记录如果表1中的记录不存在它必须从表2获取它然后稍后当id可能会移动到表2中更新的新区域时。

if EXISTS (select ID       
           from Table1 
           where area=@Area and Date=convert(varchar(10),GETDATE(),10)
           )

BEGIN
 select     t2.ID
            ,Firstname
            ,Lastname
            ,Message
    from Table2 as T2 inner join Table1 T1
         on T2.ID=t1.ID
    where area=@Area and

          and Date=convert(varchar(10),GETDATE(),10)


END 
ELSE if not Exists(select ID       
                   from table1 
                   where area=@Area and   Date=convert(varchar(10),GETDATE(),10)
                   )

BEGIN
select      ID
           ,Firstname
           ,Lastname
    from  table 2
    where area=@Area

END

END

问题是因为表2中的区域发生了变化,所以它认为ID 111的记录在表1中不存在,所以它忽略了存在的第一部分

1 个答案:

答案 0 :(得分:0)

这不是外连接的用途吗?无需在SQL Server中进行过程编程。引擎将处理它,这是一个很好的数据库模型:

SELECT B.ID, A.FIRSTNAME, A.LASTNAME, B.MESSAGE
FROM [TABLE2] AS A
LEFT OUTER JOIN [TABLE1] AS B
ON A.AREA=B.AREA
AND A.DATE=B.DATE

如果你对连接之间的区别感到困惑,我会读到this。 ven图非常适合可视化它的工作原理。