Ваш запрос было бы намного легче читать, если бы вы использовали псевдонимы. Смешивание внешних соединений в середине предложения 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
s для стола, где вам требуются спички. Сначала эти go. - Затем введите
left join
s, если совпадения не нужны. right join
практически никогда не требуется.
Если вы выполняете фильтрацию, то фильтрация исходных таблиц (обычно первой) выполняется в предложении where
. Фильтры в таблицах на «обратной стороне» left join
s go в предложениях on
.