加入记录不匹配的地方

时间:2012-09-13 10:49:23

标签: sql-server tsql

我需要在两张桌子上进行连接,我需要表A中的所有内容,以及表格B中的所有内容,其中包括' REF'对于每一行,不在表A的结果中。

重要事实: 表B包含完整的ID /名称数量,但所有其他信息都是空白的。它基本上只是一张包含所有员工姓名和身份证的表格,但却是一份完整的清单。 表A包含有限数量的结果,但所有其他列都包含数据。

我需要的是使用表B作为完整的参考,而不是仅仅看看表A中存在的内容:

  

"显示表A中的所有内容,并添加额外人员的详细信息   在表B中找到它们在表A中不存在以给我一个完整的结果集"

select
ID,
Name,
StartDate,
EndDate,
State,
Status,
Comment,
IsComment
from
tableA


select
ID,
Name,
StartDate,
EndDate,
State,
Status,
Comment,
IsComment
from
tableB

表A内容:

ID       Name     START_DATE       END_DATE      STATE    Status     Comment    Is_Comment
6760    chris       2012-09-03      2012-09-09   4       Applied                   0
6524     dave     2012-09-03        2012-09-09    4        Applied                 0
4268     james    2012-09-03        2012-09-09    4        Applied    Friday-Off   1
7851     rob      2012-09-03        2012-09-09    4       Applied                  0

表B内容

    ID        Name     START_DATE       END_DATE      STATE    Status     Comment    Is_Comment
    6760    Chris   
    6524    dave    
    4268    james   
    7851    rob      
    4521    ryan
    5698   julie
    4596    rory
    1111     mary
    5621     owain
    9999     jacob

加入后我想看到的内容:

    ID       Name     START_DATE       END_DATE      STATE    Status     Comment    Is_Comment

    6760    chris       2012-09-03      2012-09-09   4       Applied                   0
    6524     dave     2012-09-03        2012-09-09    4        Applied                 0
    4268     james    2012-09-03        2012-09-09    4        Applied    Friday-Off   1
    7851     rob      2012-09-03        2012-09-09    4       Applied                  0   
   4521    ryan
   5698    julie
   4596    rory
  1111     mary
  5621     owain
  9999     jacob

3 个答案:

答案 0 :(得分:2)

试试这个:

select
tableB.ID,
tableB.Name,
tableA.StartDate,
tableA.EndDate,
tableA.State,
tableA.Status,
tableA.Comment,
tableA.IsComment
from
tableB
LEFT JOIN tableA on tableB.ID = tableA.ID

因为每个IDName都会列出来自tableB ,并且每个其他列都列在tableA中。 如果表之间没有连接,那么其他列从TableA得到NULL - 因为LEFT JOIN - 如果有连接,那么你也可以从TableA获得填充值。

以下是SQL fiddle这个简单解决方案的工作原理。

答案 1 :(得分:1)

请使用此SQL:

declare @tableA table 
(
ID int,
Name nvarchar(250),
Age int
)

declare @tableB table 
(
ID int,
Name nvarchar(250),
Age int
)

Insert @tableA values (1,'a',10);
Insert @tableA values (2,'b',20);

Insert @tableB values (1,'a',null);
Insert @tableB values (2,'b',null);
Insert @tableB values (3,'c',null);
Insert @tableB values (4,'d',null);

select  tblResult.*,T1.Age from 
(
select ID,Name from @tableA
union
select ID,Name from @tableB) as tblResult 
left join @tableA as T1 on tblResult.ID =T1.ID

答案 2 :(得分:0)

使用左连接

SELECT [columnsListYouNeed]
FROM  TableB 
LEFT JOIN TableA ON TableA.ID = TableB.ID