2013-08-16 127 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

抱歉的解决方法。我没有得到你。你能否给我一些样本数据和预期的输出。请编辑问题以反映相同的问题。 –