2012-09-13 80 views
1

我需要做两个表的联接,我需要从表中的一切内容,并从表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 
+0

我试图做一个左连接上(子查询这给表B的结果)在tableb.id <> tablea.id – JsonStatham

+0

这是一个非常简单的左连接问题,你只需要改变选择列表,从列表中获取信息。检查我的解决方案 –

回答

0

使用LEFT JOIN

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

这不是OP正在寻找的东西。他希望记录中的DONT与表B相匹配,而不是像LEFT JOIN那样匹配的记录。 –

+1

@general例外,不知道你是什么暗示,而B左连接A是什么OP是寻找。我认为downvote是错误的。 – tranceporter

+1

@tranceporter道歉。误读答案。附:我不是downvoter。 –

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的列出,并每隔一列是从表A中列出。 如果表之间没有连接,然后将另一列从表A得到了空 - 因为LEFT JOIN的 - ,如果有那么一个连接,您从表A得到填充值也。

下面是一个SQL fiddle这个简单的解决方案是如何工作的。

+0

我应该补充说,这些表不存在,只是两个单独的查询和表中的名称是来自子查询已经 – JsonStatham

+0

查询,但从哪里选择数据?:)在你的问题有一个tableA和tableB。 –

+0

从两个表中选择数据,但是有几个case语句和一个子查询让我获得名称 – JsonStatham

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