Проблема с внутренним соединением, которое возвращает null - PullRequest
0 голосов
/ 08 мая 2020

У меня есть этот код:

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».

введите описание изображения здесь

Мне не хватает столбца Account must значение retuner от KoKlDetail.Konto.

Надеюсь, найдется кто-нибудь, кто может мне с этим помочь.

Заранее большое спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Ваш запрос было бы намного легче читать, если бы вы использовали псевдонимы. Смешивание внешних соединений в середине предложения 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.

0 голосов
/ 08 мая 2020

нулевое значение означает, что нет записей, соответствующих условию. Может, ваш случай просто в том, что нет записей, соответствующих условиям? :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...