Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2016, 20:43   #1
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
По умолчанию Фильтрация lookup поля или есть другие варианты?

Объясню на примере который сделал для форума, и прикрепил ниже.
Пришлось вернуться к lookup полю, так как sql запрос тут не работает(или я что то не так делаю).
На главной форме DBGrid, который отображает данные из SQL запроса. Дело в том, что при поступлении пациента диагноз ему ставится не сразу, и нужно отобразить всех пациентов, и у которых он есть, и у которых нету. SQl запрос не отображает пациентов, у которых диагноз не стоит, так как нет ни 1 записи из таблицы "Диагноз".
Вот sql запрос:
Код:
SELECT pacient.surname, diagnoz.nazv, history.otdelenie
FROM pacient INNER JOIN (diagnoz INNER JOIN history ON diagnoz.id = history.id_diagnoz) ON pacient.id = history.id_pacient;
В итоге пришлось отображать данные из таблицы "История", и создавать lookup поля. Но в отличие от запроса, фильтр по lookup полям не работает, пишет ошибку: "В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру." С обычным полем "Отделение" фильтр работает.
Не могу продвинуться из-за этой проблемы уже второй день. Прошу помощи, кто знает как решается проблема.
Вот База и Приложение
Вложения
Тип файла: rar arch.rar (541.9 Кб, 6 просмотров)
efefw вне форума Ответить с цитированием
Старый 03.12.2016, 22:48   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Гугл предлагает приблизительно такое:
Код:
SELECT pacient.surname, IFNULL(diagnoz.nazv, "Нет диагноза") as nazv, history.otdelenie
FROM pacient INNER JOIN (diagnoz INNER JOIN history ON diagnoz.id = history.id_diagnoz) ON pacient.id = history.id_pacient;
у IFNULL есть варианты, поэтому если БД не поймёт эту ф-ию, то гугли\пробуй ISNULL, COALESCE

Сообщи работает ли
GreenWizard вне форума Ответить с цитированием
Старый 03.12.2016, 23:01   #3
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
По умолчанию

Спасибо, буду пробывать. Завтра днем отпишусь о результате.
efefw вне форума Ответить с цитированием
Старый 03.12.2016, 23:40   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

LEFT JOIN нужно использовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2016, 00:42   #5
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
LEFT JOIN нужно использовать
Хорошо, попробую
efefw вне форума Ответить с цитированием
Старый 04.12.2016, 15:29   #6
efefw
 
Регистрация: 30.11.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
у IFNULL есть варианты, поэтому если БД не поймёт эту ф-ию, то гугли\пробуй ISNULL, COALESCE

Сообщи работает ли
Acces не определяет функцию, поискал, но не смог найти ничего рабочего.

Вариант с left join хороший, попробую его. Правда значения null хотелось бы заменить на пустое поле, или свой комментарий.
efefw вне форума Ответить с цитированием
Старый 04.12.2016, 19:16   #7
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

в Access-e самом это может быть функция nz
left join - да, не заметил что был inner, НО и он оставит null где диагноза нет, поэтому понадобится это учитывать либо на уровне запроса, либо "выше"
почитай эту тему, может поможет... но это если говорить чисто об sql, не касаясь ни структуры БД (может там вовсе проще ввести "болезнь №0" и на неё ссылаться, например, чтоб с null не возиться), ни где оно используется (Делфя там, шарп)
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Synchronize, Критические секции, другие варианты, что лучше для синхронизации потоков? bilibian Общие вопросы Delphi 15 04.03.2014 10:57
получить данные поля исходя из lookup-поля malayka Помощь студентам 0 21.04.2010 21:19
как получить значение поля грид на основе значения другого lookUp поля malayka БД в Delphi 0 21.04.2010 19:06
Полный перебор или есть другие варианты? androidvsu Помощь студентам 8 12.03.2009 14:07
Форматирование текста внутри поля. как? или другие варианты... smoky Microsoft Office Access 2 26.12.2008 19:09