2009-08-10 2 views
0

Я пытаюсь придумать запрос доступа, который соответствует этому оракулу запросусловия на внешних соединения

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, но в доступе эти строки отсутствуют. Каков синтаксис доступа для включения строк, в которых нет совпадений в классе с курсом?

ответ

2

Я думаю, что вам может потребоваться добавить еще одно условие в предложение WHERE. Добавить «OR Is Null» в предложение 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

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

+0

Нет, боюсь нет. – stimms

Смежные вопросы