2012-09-13 82 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