0

表格1

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  
4

5 回答 5

1

那是因为您在 Table1 中没有一行具有 DetailId 2 和 3 的外键,那么它还能如何返回连接中的那些呢?

于 2013-08-16T13:54:06.430 回答
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);
于 2013-08-16T14:08:12.153 回答
0
SELECT t1.Id, t1.DetailId, t1.value 
FROM table1 AS t1 
LEFT JOIN table2 AS t2. ON t1.Detaild = t2.detailid;

使用上面的查询。

于 2013-08-16T13:56:03.970 回答
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

于 2013-08-16T14:35:50.990 回答
0
select t2.[Id],t2.Detailid,t1.value
from Table2 t2
left join Table1 t1
on t2.value = t1.value;

小提琴

于 2013-08-17T16:36:07.063 回答