powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Не работает сравнение в SQL'е, помогите пожалуйста.
12 сообщений из 12, страница 1 из 1
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37468563
Доброго времени суток. К сожалению, я не знаю как называется этот диалект SQL, поэтому жизнь моя тяжела и неказиста. Однако, надеюсь, что кто-нибудь сможет мне помочь :).

В общем, есть 2 запроса, первый:
Код: plaintext
1.
2.
3.
4.
SELECT "Journal"."NUMBERDEAL", MAX(DATESENDWRIT) FROM "Journal", "Bailiff" 
WHERE (Journal.NUMBERDEAL) = (Bailiff.NUMBERDEAL)
GROUP BY  "Journal"."NUMBERDEAL", "Bailiff"."DATESENDWRIT"
HAVING (MAX(DATESENDWRIT)< 74513 )and(MAX(DATESENDWRIT)> 74148 )
и второй:
Код: plaintext
1.
2.
3.
4.
SELECT NUMBERDEAL,  MAX(DATESENDWRIT) FROM "Bailiff"
WHERE (DATESENDWRIT> 74148 ) AND (DATESENDWRIT< 74513 )
GROUP BY NUMBERDEAL
HAVING (MAX(DATESENDWRIT)> 74148 ) AND (MAX(DATESENDWRIT)< 74513 )
Первый возвращает 8 результатов, второй -- 17. И всё бы ничего, но из этих 17 на глаз все подходят под результаты первого... То есть разницы между полями NUMBERDEAL в этих таблицах на глаз нету, а тем не менее часть данных не определяется как одинаковая... Есть предположение, что дело в том, что эти поля включают что попало, от букв с цифрами, до пробелов и знаков препинания. Но определить, что именно из этих символов вызывает в запросе ошибку не удалось... Подскажите пожалуйста, как быть.

P.S. Пишу на Дельфи под BDE, оттуда дергаю ODBC, который через драйвер TopSpeed лезет к базе на Кларионе...
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37468655
Никита Хохлачёв,

Собственно, взял тот номер, который находится первым запросом и не находится вторым и проверил, так работает:
Код: plaintext
SELECT  NUMBERDEAL FROM "Journal"  WHERE "NUMBERDEAL" like '27-04-22/02/03 дз Д'

а так нет:
Код: plaintext
SELECT  NUMBERDEAL FROM "Journal"  WHERE "NUMBERDEAL" = '27-04-22/02/03 дз Д'

Но изменить свой запрос таким образом мне не удаётся:
Код: plaintext
1.
2.
3.
4.
SELECT "Journal"."NUMBERDEAL", MAX(DATESENDWRIT) FROM "Journal", "Bailiff" 
WHERE (Journal.NUMBERDEAL) like (Bailiff.NUMBERDEAL)
GROUP BY  "Journal"."NUMBERDEAL", "Bailiff"."DATESENDWRIT"
HAVING (MAX(DATESENDWRIT)< 74513 )and(MAX(DATESENDWRIT)> 74148 )
потому что при попытке это сделать выскакивает ошибка: "[TopSpeed ODBC] Expected lexical element not found: USER"
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37468662
kDnZP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Хохлачёв, это два разных запроса. Они могут возвращать как разные так и одинаковые результаты.

* Псевдонимы или хотя бы явное указание таблиц необходимо делать.
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37468786
kDnZPНикита Хохлачёв, это два разных запроса. Они могут возвращать как разные так и одинаковые результаты.

* Псевдонимы или хотя бы явное указание таблиц необходимо делать.
Они конечно разные, но мне надо, чтобы первый из них полному имени находил все строчки. А данные (и те, которые обрабатываются и те, которые не видятся) приведены на скриншоте.

А псевдонимы в этом диалекте то ли вообще не работают, то ли я не понял, как их задавать. Ключевого слова AS например нет. Явные указания таблиц тоже не помогают. Точнее, не помогают там, где их нет в примере.

И вообще, вопрос наверное сводится к тому, как запихнуть "like" вместо "=" в первый запрос или сделать что-то аналогичное.
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37469651
Гость222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GROUP BY "Journal"."NUMBERDEAL", "Bailiff"."DATESENDWRIT"

GROUP BY NUMBERDEAL


Вот в этом и есть разница данных запросов, в одном случае идет группировка с учетом даты, во втором только по номеру, отсюда и разное количество возвращаемых записей
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37470653
Гость222GROUP BY "Journal"."NUMBERDEAL", "Bailiff"."DATESENDWRIT"
GROUP BY NUMBERDEAL
Вот в этом и есть разница данных запросов, в одном случае идет группировка с учетом даты, во втором только по номеру, отсюда и разное количество возвращаемых записей

Так работает также:
Код: plaintext
1.
2.
3.
SELECT NUMBERDEAL,  MAX(DATESENDWRIT) FROM "Bailiff"
WHERE (DATESENDWRIT> 74148 ) AND (DATESENDWRIT< 74513 )
GROUP BY NUMBERDEAL,"Bailiff"."DATESENDWRIT"
HAVING (MAX(DATESENDWRIT)> 74148 ) AND (MAX(DATESENDWRIT)< 74513 )
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37470766
А еще,
Код: plaintext
SELECT  NUMBERDEAL FROM "Journal"  WHERE "NUMBERDEAL" = '27-04-22/02/03 дз Д'
не работает, а
Код: plaintext
SELECT  NUMBERDEAL FROM "Journal"  WHERE "NUMBERDEAL" = '27-04-22/05/03 ДО'
работает.

В этом и разница. Сами эти строки видны в скриншоте, который я выше приводил.
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37473048
Ну что, неужели никаких идей ни у кого нету? -- Если это невозможно -- так и скажите, буду придумывать как жить иначе...
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37473464
Никита Хохлачёв,
Да есть идея выучить тебе азы SQL
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37475016
советчик_склНикита Хохлачёв,
Да есть идея выучить тебе азы SQL
Вносить данные в таблицы так, чтобы содержимое ключевых полей изначально однозначно определялось по значку "=" -- это как раз относится к азам SQL. К сожалению, разработчики той базы, к которой я стараюсь получить доступ, видимо об этом не знали. Вот я теперь и мучаюсь.
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37475024
kDnZP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Хохлачёв, у вас элементарно может быть какой-нить пробельный символ в конце, т.е. 160, 6, 10, 13. В таком случае сравнение по "=" естественно не сработает. Вывод: привести в порядок данные в таблицах, либо писать запросы с учетом граблей в данных.

* Привести в порядок данные ИМХО вариант гораздо лучше. Не знаю как в вашей СУБД, может есть replace и можно сие дело быстро поправить...
...
Рейтинг: 0 / 0
Не работает сравнение в SQL'е, помогите пожалуйста.
    #37475400
kDnZPНикита Хохлачёв, у вас элементарно может быть какой-нить пробельный символ в конце, т.е. 160, 6, 10, 13. В таком случае сравнение по "=" естественно не сработает. Вывод: привести в порядок данные в таблицах, либо писать запросы с учетом граблей в данных.

* Привести в порядок данные ИМХО вариант гораздо лучше. Не знаю как в вашей СУБД, может есть replace и можно сие дело быстро поправить...
Я бы с удовольствием -- первое, что я хотел сделать, это написать конвертер в обычный SQL со всеми нужными преобразованиями... Но к сожалению, оказалось, что с базой работают всё время... И добавляют записи и генерируют какие-то выгрузки, в общем, процесс идет своей жизнью. Поэтому я пытаюсь придумать способ работать с базой с учетом имеющихся проблем.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Не работает сравнение в SQL'е, помогите пожалуйста.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]