我有此代码:
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”表。
] 1
下面的图片用于“ OpgaveD”表。
我缺少列“帐户必须从KoKlDetail.Konto重新调整值”。
我希望有人可以帮助我。
在此先感谢您的帮助。
答案 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
另一侧的表上的过滤器。