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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2013, 04:43   #1
formula-1
Новичок
Джуниор
 
Регистрация: 14.11.2013
Сообщений: 3
По умолчанию Запрос не корректно работает

Здравствуйте! У меня запрос не корректно работает, работает отдельно:
Код:
(table3.NAMEagent<>table3.nameperson and
table3.nameperson<>table4.namesotr and
table3.NAMEagent<>table4.namesotr)
от этого кода :
Код:
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%русский язык%' and table4.namesotr<>'% литература%')
and (table3.nameperson <>'%литература%' and table4.namesotr<>'%русский язык%')
а все вместе не хочет работать:
Код:
(table3.NAMEagent<>table3.nameperson and
table3.nameperson<>table4.namesotr and
table3.NAMEagent<>table4.namesotr)
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%русский язык%' and table4.namesotr<>'% литература%')
and (table3.nameperson <>'%литература%' and table4.namesotr<>'%русский язык%')
если все вместе,то работает эта часть только
Код:
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%русский язык%' and table4.namesotr<>'% литература%')
and (table3.nameperson <>'%литература%' and table4.namesotr<>'%русский язык%')
----------------
Полный запрос:
Код:
select
table1.no,
table2.am,
table3.NAMEagent,
table3.nameperson,
table4.namesotr,
table5.nameotdel,
table2.date
FROM rego regin
JOIN regFK ON regin.ID=regFK.ID
JOIN table1 ON regFK.ID=table1.ID
JOIN table4 ON table1.ID=table4.ID
JOIN table2 ON table4.ID=table2.ID
join table3 on table1.IP_ID=table3.id
join table5 on table1.IP_ID=table5.id
where
(table3.NAMEagent<>table3.nameperson and
table3.nameperson<>table4.namesotr and
table3.NAMEagent<>table4.namesotr)
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%русский язык%' and table4.namesotr<>'% литература%')
and (table3.nameperson <>'%литература%' and table4.namesotr<>'%русский язык%')
and table2.date >= '08.10.2013' and table2.date < '11.11.2013'
Помогите, пожалуйста, как правильно написать, чтобы весь код работал. Спасибо!

Последний раз редактировалось Stilet; 14.11.2013 в 14:28.
formula-1 вне форума Ответить с цитированием
Старый 14.11.2013, 08:07   #2
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 516
По умолчанию

что значит не правильно работает? говорит ошибку (какую) или не то выдает?
какая база/диалект?

ну и беглый взгляд показал
table3.nameperson <>'%математика%' не верно если только в базе не записано с знаками "%"
надо так table3.nameperson like '%математика%'

table2.date < '11.11.2013' дату лучше через переменную передавать или хотябе преобразовать к типу date
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 14.11.2013, 08:46   #3
formula-1
Новичок
Джуниор
 
Регистрация: 14.11.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
что значит не правильно работает? говорит ошибку (какую) или не то выдает?
какая база/диалект?

ну и беглый взгляд показал
table3.nameperson <>'%математика%' не верно если только в базе не записано с знаками "%"
надо так table3.nameperson like '%математика%'

table2.date < '11.11.2013' дату лучше через переменную передавать или хотябе преобразовать к типу date
Оказывается в базе неверно оформляют текст, с двумя пробелами или с маленького или с большого. Как функцию написать чтобы и эти исключал?
formula-1 вне форума Ответить с цитированием
Старый 14.11.2013, 09:44   #4
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 516
По умолчанию

если пробелы в начале или конце то поможет trim(' fasgg ')
а для регистра можно поиграться с Upper/Lower
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 15.11.2013, 03:44   #5
formula-1
Новичок
Джуниор
 
Регистрация: 14.11.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
если пробелы в начале или конце то поможет trim(' fasgg ')
а для регистра можно поиграться с Upper/Lower
select
table1.no,
table2.am,
table3.NAMEagent,
table3.nameperson,
table4.namesotr,
table5.nameotdel,
table2.date
FROM rego regin
JOIN regFK ON regin.ID=regFK.ID
JOIN table1 ON regFK.ID=table1.ID
JOIN table4 ON table1.ID=table4.ID
JOIN table2 ON table4.ID=table2.ID
join table3 on table1.IP_ID=table3.id
join table5 on table1.IP_ID=table5.id
where trim((' NAMEagent ') or (' nameperson ') or (' namesotr '))
and not ((table3.NAMEagent=table3.nameperso n or
table3.nameperson=table4.namesotr or
table3.NAMEagent=table4.namesotr))
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%математика%' and table4.namesotr<>'%геометрия%')
and (table3.nameperson <>'%русский язык%' and table4.namesotr<>'% литература%')
and (table3.nameperson <>'%литература%' and table4.namesotr<>'%русский язык%')
and table2.date >= '08.10.2013' and table2.date < '11.11.2013'

пишет ошибка trim((' NAMEagent ') or (' nameperson ') or (' namesotr '))
как написать правильно?
formula-1 вне форума Ответить с цитированием
Старый 15.11.2013, 08:31   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 516
По умолчанию

trim отсекает пробелы по краям строки
например будет правильно так
Код:
table3.nameperson <> trim('   математика ')
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 15.11.2013, 08:37   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну тогда уж лучше в таком духе

Код:
Trim(table3.nameperson) not in ('математика','русский язык',..)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2013, 08:41   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

правильно ругается. Вы же бред написали!

TRIM() - это функция, которая ВОЗВРАЩАЕТ переданное в неё параметром строковое выражение без концевых (начальных и конечных) пробелов.

я не понимаю, чего Вы в запросе добиваетесь, поэтому не могу подсказать, как Вам лучше написать...
в крайнем случае везде, где у Вас в where table3.nameperson замените на TRIM(table3.nameperson), table3.NAMEagent -> TRIM(table3.NAMEagent), table4.namesotr -> TRIM(table4.namesotr) и т.д.


p.s. а вообще, мне Ваш запрос КАТЕГОРИЧЕСКИ не нравится - либо кривая структура, либо Вы правой рукой пытаетесь левое ухо почесать...


UPDATED
увидел пост от Аватар. Согласен с ним!

и, если я не ошибаюсь, подстановочные знаки, которые Вы пытаетесь использовать ( %математика%) не работают при использовании операций = или <>, тогда нужно писать LIKE или NOT LIKE ).
Но, в данном случае, лучше использовать IN как и предложил Аватар

Последний раз редактировалось Serge_Bliznykov; 15.11.2013 в 08:45.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код работает не корректно AcTiV Общие вопросы C/C++ 4 25.12.2012 23:01
Запрос к MySQL не работает корректно Гламурная птица Помощь студентам 1 01.10.2011 19:43
Функция работает не корректно! VintProg Общие вопросы Delphi 8 04.08.2011 14:54
Программа работает не корректно Neymexa Общие вопросы C/C++ 5 24.12.2008 19:17