Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Здравствуйте! У меня запрос не корректно работает, работает отдельно:
Код:

(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
Адрес: Таганрог
Сообщений: 518
Репутация: 211

icq: 240909912
По умолчанию

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

ну и беглый взгляд показал
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
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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
Адрес: Таганрог
Сообщений: 518
Репутация: 211

icq: 240909912
По умолчанию

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

Цитата:
Сообщение от 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
Адрес: Таганрог
Сообщений: 518
Репутация: 211

icq: 240909912
По умолчанию

trim отсекает пробелы по краям строки
например будет правильно так
Код:

table3.nameperson <> trim('   математика ')

__________________
Пишу на Delphi за еду
Toxa вне форума   Ответить с цитированием
Старый 15.11.2013, 08:37   #7
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,782
Репутация: 6211
По умолчанию

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

Код:

Trim(table3.nameperson) not in ('математика','русский язык',..)

__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 15.11.2013, 08:41   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,056
Репутация: 5228
По умолчанию

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

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код работает не корректно 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 20:17


21:17.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru