1

我需要对两个表进行连接,我需要表 A 中的所有内容,并且只需要表 B 中的内容,其中每行的“REF”尚未出现在表 A 的结果中。

关键事实:表 B 包含 ID/姓名的完整数量,但所有其他信息均为空白。它基本上只是一个包含所有员工姓名和 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
4

3 回答 3

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

因为每个IDandName都会从 tableB中列出,而其他每一列都从 tableA 中列出。如果表之间没有连接,则其他列从 TableA 获得 NULL -因为 LEFT JOIN - 如果有连接,那么您也从 TableA 获得填充值。

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

于 2012-09-13T10:54:48.540 回答
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
于 2012-09-13T11:03:50.473 回答
0

使用左连接

SELECT [columnsListYouNeed]
FROM  TableB 
LEFT JOIN TableA ON TableA.ID = TableB.ID
于 2012-09-13T10:51:53.053 回答