获取完整的结果集并在需要时返回NULL

时间:2016-12-13 19:11:40

标签: sql join sql-server-2012

我有2张这样的表:

tableA
-------
skillId | characterId

tableB
-------
skillId | skillName

我需要选择tableB中的所有行和tableA中characterId = 123的所有行,如果characterId不在tableA中,则返回NULL

所以结果如下:

charID    SkillName
-------------------
123       Jumping
123       Running
NULL      RangedAttack
123       MeleeWeapon
NULL      AutomaticWeapon
123       Handgun
NULL      EarthMagic
NULL      WaterMagic

我试过这个:

select a.characterId As charID, b.skillName AS SkillName
from tableA a
left join tableB b ON a.skillId = b.skillId
where characterId = 123

和这一个:

select a.characterId As charID, b.skillName AS SkillName
from tableA a
full outer join tableB b ON a.skillId  = b.skillId
where characterId = 123

但两个查询都没有给我任何结果,即使我知道它应该给我一些东西。

是否有正确的方法来获得我需要的结果?

谢谢!

1 个答案:

答案 0 :(得分:3)

您的left join顺序错误:

select a.characterId As charID, b.skillName
from tableB b left join
     tableA a
     on a.skillid = b.skillId and a.characterId = 123;

如果你想要TableB中的所有技能,那么这应该是left join中的第一个表。