我无法弄清楚如何连接这两个表并获得我想要的NULL值的结果。我玩过LEFT JOIN
,RIGHT JOIN
,FULL 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
请帮忙。 谢谢!
答案 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;