2013-08-16 130 views
0

表1SQL左連接問題

Id   value 
1    1 
1    4 

表2

id  Detailid   value 
1  1     1 
1  2     2 
1  3     3 
1  4     4 
1  5     5 
1  6     6 

我想要的結果

Id  Detaild  value 
1  1   1 
1  2   null 
1  3   null 
1  4   4 
1  5   null 
1  6   null 

我下面的查詢給了我與空2個多餘的行

select distinct t1.id,t2.detailid 
,case when t1.value IN(t2.Value) then t1.value else null end as value 
from table1 t1 
left outer join table2 t2 
on t1.id= t2.id 

我越來越

Id  Detaild value 
1  1   null ----dont need 
1  1   1 
1  2   null 
1  3   null 
1  4   null ---dont need 
1  4   4 
1  5   null 
1  6   null 
+2

讓我們來看看你的select語句。 – ganders

+0

另外,表1中有2行,表2中有6行。在你的「我想要的結果」中,你聲明你想要DetailId的1,2,3,4;其中值2和3不存在於任何表中。你的查詢將永遠不會工作。 – ganders

+1

你想做什麼?因爲你所要求的結果不適用 –

回答

0

從你所給出的數據,這個查詢會做的伎倆:

SELECT isnull(t1.Id,1), t2.Detailid, t1.value 
FROM Table2 AS t2 
LEFT OUTER JOIN Table1 AS t1 ON t1.Detailid = t2.Detailid AND t1.ID = 1 

SQLFIDDLE:http://www.sqlfiddle.com/#!3/4c808/8/0

編輯:

那麼看看下面的查詢,基於你上次編輯:

SELECT t2.Id, t2.Detailid, t1.value 
FROM Table2 AS t2 
LEFT OUTER JOIN Table1 AS t1 ON t1.Id = t2.Id AND t1.value = t2.value 
WHERE t2.Id = 1 

SQLFIDDLE:http://www.sqlfiddle.com/#!3/94f21a/5/0

重新編輯:

SELECT t2.Id, t2.Detailid, t1.value 
FROM Table2 AS t2 
LEFT OUTER JOIN Table1 AS t1 ON t1.Id = t2.Id AND t1.value = t2.value 
WHERE t2.id IN (SELECT Id FROM Table1) 

SQLFIDDLE:http://www.sqlfiddle.com/#!3/beede/7/0

如果(SELECT Id FROM Table1)返回太多行,你可以試試這個:

SELECT DISTINCT t2.Id, t2.Detailid, t1.value 
FROM Table2 AS t2 
INNER JOIN Table1 AS t ON t.Id = t2.Id 
LEFT OUTER JOIN Table1 AS t1 ON t1.Id = t2.Id AND t1.value = t2.value 

SQLFIDDLE:http://www.sqlfiddle.com/#!3/beede/9/0

+0

非常感謝。我看着我的真實數據情況,我想我需要更新表1和表2的列。我非常抱歉重新更新問題。 – TD2013

+0

我編輯了我的答案。 –

+0

感謝您的回答。它根據我提供的數據完美工作。如果表中有多個ID,那麼只需要再澄清一點,那麼Where子句無法具體說明的是他們對where子句的解決方法 – TD2013

1

那是因爲你沒有在表1的行與外鍵DetailId 2和3,因此它還能如何返回那些在加入?

0
SELECT t1.Id, t1.DetailId, t1.value 
FROM table1 AS t1 
LEFT JOIN table2 AS t2. ON t1.Detaild = t2.detailid; 

使用上述查詢。

1
SELECT t1.Id, t2.DetailId, t1.value 
FROM table1 AS t1 
LEFT OUTER JOIN table2 AS t2. ON t1.DetailId = t2.detailId 
WHERE t2.DetailId NOT IN (5,6); 
0
select t2.[Id],t2.Detailid,t1.value 
from Table2 t2 
left join Table1 t1 
on t2.value = t1.value; 

FIDDLE

+0

感謝您的回答。它根據我提供的數據完美工作。如果表中有多個ID,那麼只需要再次澄清一點,那麼Where子句無法具體指明的是他們對where子句 – TD2013

+0

抱歉的解決方法。我沒有得到你。你能否給我一些樣本數據和預期的輸出。請編輯問題以反映相同的問題。 –