SQL Server:加入两个表并返回空记录

时间:2013-04-17 23:11:36

标签: sql-server

我无法弄清楚如何连接这两个表并获得我想要的NULL值的结果。我玩过LEFT JOINRIGHT JOINFULL OUTER JOIN ...,但无法让它发挥作用。请看下面的内容。

表1

NameID  Name
1       N1
2       N2
3       N3
4       N4
5       N5

表2

NameID  AnotherID   Value
1       AID-111     1000
2       AID-222     2000
2       AID-222     3000
3       AID-333     4000
4       AID-444     5000


Select ...
JOIN Table1 and Table2
WHERE AnotherID = 'AID-222' 

这是我想要的结果:

NameID  Name    AnotherID   VALUE
1       N1      NULL        NULL
2       N2      AID-222     2000
3       N3      AID-222     3000    
4       N4      NULL        NULL    
5       N5      NULL        NULL

请帮忙。 谢谢!

2 个答案:

答案 0 :(得分:4)

您没有解释为什么要返回2000而不是3000的值,但您可以使用带有子查询的LEFT JOIN来获得结果:

select t1.nameid,
  t1.name,
  t2.anotherid,
  t2.value
from table1 t1
left join
(
  select nameid, anotherid, min(value) value
  from table2
  where anotherid = 'AID-222'
  group by nameid, anotherid
) t2
  on t1.nameid = t2.nameid;

SQL Fiddle with Demo。这给出了结果:

| NAMEID | NAME | ANOTHERID |  VALUE |
--------------------------------------
|      1 |   N1 |    (null) | (null) |
|      2 |   N2 |   AID-222 |   2000 |
|      3 |   N3 |    (null) | (null) |
|      4 |   N4 |    (null) | (null) |
|      5 |   N5 |    (null) | (null) |

答案 1 :(得分:0)

我们也可以使用完全联接,它也会给出您的答案:

tableA t1中选择t1.nameid,t1.name,t2.anotherid,t2.value

full outer join
(
    select nameid,anotherid,value from tableB 
    where anotherid IN ('AID-222','AID-333') 

) t2 
on t1.nameid = t2.nameid;