Условия на внешних соединениях - PullRequest
0 голосов
/ 11 августа 2009

Я пытаюсь найти запрос Access, который эквивалентен этому запросу Oracle

select ledef_name, 
       count(class.EVT_PK) timesTaught 
from ingenium.ledef course, 
     ingenium.evt class 
where course.LEDEF_PK = class.EVT_LEDEFFK(+)  
  and class.EVT_STARTDT(+) > to_date('2009-01-01', 'yyyy-mm-dd') 
group by ledef_name 

В доступе у меня есть

SELECT course.ledef_name, Count(class.EVT_PK) AS timesTaught
FROM INGENIUM_LEDEF AS course LEFT JOIN INGENIUM_EVT AS class ON course.LEDEF_PK = class.EVT_LEDEFFK
WHERE class.EVT_STARTDT>#1/1/2009#
GROUP BY course.ledef_name;

В версии Oracle я получаю строки со счетом 0, но в Access эти строки отсутствуют. Каков синтаксис доступа для включения строк, где в классе нет соответствия строке в курсе?

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

Я думаю, что вам может понадобиться добавить еще одно условие в ваше предложение WHERE. Добавьте в предложение WHERE «ИЛИ НУЛЬ» и попробуйте это?

SELECT course.ledef_name, Count(class.EVT_PK) AS timesTaught
FROM INGENIUM_LEDEF AS course LEFT JOIN INGENIUM_EVT AS class ON course.LEDEF_PK = 
class.EVT_LEDEFFK
WHERE class.EVT_STARTDT>#1/1/2009# OR Is Null
GROUP BY course.ledef_name;
1 голос
/ 11 августа 2009

Вы случайно не используете значения с плавающей запятой в столбцах соединения (даты - это числа с плавающей запятой в Access)? Сравнения с плавающей запятой не всегда совпадают точно из-за проблем округления и представления (даже при том, что в запросах они выводятся как одна и та же дата).

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