Sql server 根据条件合并SQL Server 2008 R2中的两个表以获取记录

Sql server 根据条件合并SQL Server 2008 R2中的两个表以获取记录,sql-server,Sql Server,表1 表2 ID Date Area message 111 2015-04-23 59 testing 222 2015-04-23 59 333 2015-04-23 97 我有两个表,我希望它首先检查表1,如果该区域存在id,那么它必须从表1中获取记录。如果表1中不存在记录,那么它必须从表2中获取记录。但是,在当天晚些时候,id可能会移动到表2中更新的新区域 ID Date Area firstname lastname 111 2015-04

表1

表2

ID  Date    Area     message
111 2015-04-23  59   testing
222 2015-04-23  59
333 2015-04-23  97
我有两个表,我希望它首先检查表1,如果该区域存在id,那么它必须从表1中获取记录。如果表1中不存在记录,那么它必须从表2中获取记录。但是,在当天晚些时候,id可能会移动到表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

问题是,由于表2中的区域发生了更改,它认为ID111的记录不存在于表1中,因此它忽略了exists的第一部分,这不是左外联接的作用吗?不需要在SQL Server中进行过程编程。引擎将处理它,这就是好的数据库模型的用途:

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

若你们为连接之间的区别而挣扎,我会继续读下去。ven图表对于可视化其工作方式非常有用。

什么是SQL Server r8?我想他指的是SQL Server 2008 R2。我假设您正在搜索
@区域
值为67的数据。在这种情况下,它当然不会在
表1
中找到ID 111,因为该区域没有记录在那里。我不太清楚你的问题是什么。您是否正在寻找一种方法来查询
表2
,并从
表1
中检索具有正确
区域
值的数据?对不起,我的意思是2008r2@Aidan我将区域值传递为59。我希望它检查表1中是否有该区域的记录。如果没有记录,则只有它必须转到表2。如果id已存在,则不必存在于表1中,然后我需要某些字段,有时表1中没有记录,然后我只想转到表2并检索不同的字段,但问题是您将59作为@AREA变量传递,但在您的定义中,表2中没有59,因此,两个查询都将返回零个匹配项。这就是我希望它忽略表2区域67,但给我firstname和last name列的原因。只要我从表1获得区域59,并且必须给我表2中与id匹配的列。让我在区域上加入它,然后查看
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