2016-03-17 4 views
1

У меня возникла ситуация, когда я снова запускаю запрос таблиц MEMBERS, MEMBERUDFS и MEMERUDFSETUPS. Где MEMBER UDF являются определяемыми пользователем полями, которые создаются системным администратором для хранения данных о клиентах в настраиваемых полях. Таблица UDFSETUPS определяет настраиваемые поля, а MEMBERUDFS сохраняет значения этих полей, если они существуют.NULL Значения не возвращаются

Проблема, с которой я сталкиваюсь, когда я извлекаю данные обратно, я не получаю строки для записей, имеющих UDF с идентификатором 17 (MEMBERUDFS.udfid = '17'), которые не имеют записи или равны нулю. Я попробовал Left Joins, но, похоже, это не помогло.

SELECT MEMBERS.scancode, MEMBERS.fname, MEMBERS.lname, MEMBERS.datejoin, MEMBERS.entrydate 
    , MEMBERS.relationship, MEMBERUDFS.udfvalue 
FROM MEMBERS 
LEFT OUTER JOINMEMBERUDFS 
    ON MEMBERS.memid = MEMBERUDFS.memid 
INNER JOIN MEMBERUDFSETUPS 
    ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
WHERE (MEMBERS.siteid = @rvSite) 
    AND (MEMBERS.status = 'A') 
    AND (MEMBERS.relationship = 'M') 
    AND (MEMBERUDFS.udfid = '17') 
    AND (MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate) 
    AND (MEMBERS.mtypeid NOT IN (5, 6, 7, 11, 14, 31)) 
    OR (MEMBERS.siteid = @rvSite) 
    AND (MEMBERS.relationship = 'P') 
    AND (MEMBERUDFS.udfid = '17') 
    AND (MEMBERS.entrydate BETWEEN @rvStartDate AND @rvEndDate) 
+3

Вы все еще есть 'ВНУТРЕННЕЙ JOIN' в' MemberUDFSetups' –

+0

'memberudf.udfid' в предложении where, заставляя их быть исключенными, вам нужно переместить этот предел на соединение или проверить наличие нулей там, где есть предложение по этому значению. – xQbert

ответ

2

Переместить ограничение на JoinMemberUDFS на соединение или ваши значения null исключаются.

Предпочтительный способ двигаться фильтр присоединиться Критерии

SELECT MEMBERS.scancode, MEMBERS.fname, MEMBERS.lname, MEMBERS.datejoin, MEMBERS.entrydate 
    , MEMBERS.relationship, MEMBERUDFS.udfvalue 
FROM MEMBERS 
LEFT JOIN MEMBERUDFS 
    ON MEMBERS.memid = MEMBERUDFS.memid 
AND MEMBERUDFS.udfid = '17' 
LEFT JOIN MEMBERUDFSETUPS 
    ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
WHERE (MEMBERS.siteid = @rvSite 
    AND MEMBERS.status = 'A' 
    AND MEMBERS.relationship = 'M' 
    AND MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate 
    AND MEMBERS.mtypeid NOT IN (5, 6, 7, 11, 14, 31)) 
    OR (MEMBERS.siteid = @rvSite 
    AND MEMBERS.relationship = 'P' 
    AND MEMBERS.entrydate BETWEEN @rvStartDate AND @rvEndDate) 

Не предпочтительную ручку, когда он пустой и убедитесь, что возвращает истину для оценки

SELECT MEMBERS.scancode, MEMBERS.fname, MEMBERS.lname, MEMBERS.datejoin, MEMBERS.entrydate 
    , MEMBERS.relationship, MEMBERUDFS.udfvalue 
FROM MEMBERS 
LEFT OUTER JOINMEMBERUDFS 
    ON MEMBERS.memid = MEMBERUDFS.memid 

INNER JOIN MEMBERUDFSETUPS 
    ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid 
WHERE (MEMBERS.siteid = @rvSite 
    AND MEMBERS.status = 'A' 
    AND MEMBERS.relationship = 'M' 
    AND MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate 
    AND MEMBERS.mtypeid NOT IN (5, 6, 7, 11, 14, 31) 
    AND (MEMBERUDFS.udfid = '17' or MEMBERUDFS.udfid is null) 
    OR (MEMBERS.siteid = @rvSite 
    AND MEMBERS.relationship = 'P' 
    AND MEMBERS.entrydate BETWEEN @rvStartDate AND @rvEndDate) 
    AND (MEMBERUDFS.udfid = '17' or MEMBERUDFS.udfid is null) 
+0

Я думаю, что это убьет левого INNER JOIN MEMBERUDFSETUPS ON MEMBERUDFS.udfid = MEMBERUDFSETUPS.udfid. Есть ссылка на MEMBERUDFSETUPS.udfid – Paparazzi

+0

да, может потребоваться, чтобы вы присоединились к элементам memberudfsetups, чтобы быть в безопасности. – xQbert

+0

Спасибо xQbert и Paparazzi !!!! Как только я добавил предложения Left Outer Join per Paparazzi, я получил результаты, которые я искал. Спасибо!!! – Merlin

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