内部联接返回null的问题

时间:2020-05-08 07:48:52

标签: sql sql-server

我有此代码:

SELECT  
    dbo.OpgaveD.Id AS Bilag, 
    dbo.OpgaveD.Dato, 
    dbo.OpgaveD.Tekst, 
    dbo.KoKlDetail.Konto, 
    dbo.OpgaveD.Modkonto, 
    dbo.OpgaveD.Debet, 
    dbo.OpgaveD.Kredit 
FROM dbo.KoKlDetail 
RIGHT JOIN dbo.OpgaveD 
ON dbo.KoKlDetail.Navn like '^[dbo.OpgaveD.Tekst]%' 
inner join Opgaver 
on OpgaveD.OpgaveId = Opgaver.Id 
Where Opgaver.Id = 1 order by Bilag

但是Konto返回“ NULL”

下面的图片用于“ KoKlDetail”表。

![enter image description here] 1

下面的图片用于“ OpgaveD”表。

enter image description here

我缺少列“帐户必须从KoKlDetail.Konto重新调整值”。

我希望有人可以帮助我。

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

空值表示没有与该条件对应的记录。 也许您的情况就是没有符合条件的记录? :)

答案 1 :(得分:0)

如果使用别名,您的查询将更容易阅读。在from子句中间混用外部联接确实令人困惑-我认为您的其他条件正在将其转换为内部联接。

我认为这可能是您想要的:

select od.Id AS Bilag, od.Dato, od.Tekst, kd.Konto, 
       od.Modkonto, od.Debet, od.Kredit 
from Opgaver o left join
     dbo.OpgaveD od
     on od.OpgaveId = o.Id 
     dbo.KoKlDetail kd left join
     on kd.Navn like '^[dbo.OpgaveD.Tekst]%'
where o.Id = 1
order by Bilag;

我怀疑您的like模式是否符合您的要求。例如,这是多余的-字符类中有重复的字符。

当您需要外部联接时,通常的用例是:

  • inner join用于需要匹配的表。这些优先。
  • 在不需要匹配的地方left join后面跟随它们。
  • right join几乎不需要。

如果要过滤,则对初始表(通常是第一个)的过滤将在where子句中进行。 left join子句中有on另一侧的表上的过滤器。