2013-04-17 65 views
1

我想不出如何加入这两个表,并获得我想要的NULL值的结果。我玩过LEFT JOINRIGHT JOINFULL OUTER JOIN ...,但无法让它工作。请参阅下面的内容。SQL Server:加入两个表并返回空记录

表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 

请帮助。 谢谢!

+0

你为什么不期望也返回的IDID为111,NameID为3,AID-333为NameID为3等?你的例子结果集根本不是一个JOIN。 – Joe

+1

你为什么只想返回'2000'的值?为什么不'3000'? – Taryn

+0

@bluefeet,为什么?假设用户可以选择填充多达5个存储桶(表1),并且表2正在跟踪存储桶有价值。所以,用户最初填写N2 = 2000,其余4空。接下来,用户点击“更新桶”,将打开全部5个桶,其中N2 = 2000,用户可以填写其他空桶。我希望它是有道理的..对不起 – Milacay

回答

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) | 
+0

这个作品完美! @BlueFeet,非常感谢 – Milacay

相关问题