Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Непонятка с запросом  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 671
Есть запрос с двумя условиями 1 и 2
применяю оба условия -
SELECT [MAIN]![MARKA] & [MAIN]![COMMENT] & [MAIN]![add] & [MAIN]![art] AS Наименование
FROM MAIN INNER JOIN vers ON MAIN.CODE = vers.codem
WHERE ((([MAIN]![MARKA] & [MAIN]![COMMENT] & [MAIN]![add] & [MAIN]![art]) Like "*71*") AND ((IIf(Exists (SELECT znper.* From znper WHERE (((znper.codever)=vers.code) AND ((znper.codeper)=6));),(SELECT znper.znper From znper WHERE (((znper.codeper)=6) AND ((znper.codever)=vers.code));),Null)) Between 0.1 And 1));

это работает

Применяю только условие 2-
SELECT [MAIN]![MARKA] & [MAIN]![COMMENT] & [MAIN]![add] & [MAIN]![art] AS Наименование
FROM MAIN INNER JOIN vers ON MAIN.CODE = vers.codem
WHERE (((IIf(Exists (SELECT znper.* From znper WHERE (((znper.codever)=vers.code) AND ((znper.codeper)=6));),(SELECT znper.znper From znper WHERE (((znper.codeper)=6) AND ((znper.codever)=vers.code));),Null)) Between 0.1 And 1));

это не работает : Данный подчиненный запрос должен возвращать не более одной записи

применяю только условие 1
SELECT [MAIN]![MARKA] & [MAIN]![COMMENT] & [MAIN]![add] & [MAIN]![art] AS Наименование
FROM MAIN INNER JOIN vers ON MAIN.CODE = vers.codem
WHERE ((([MAIN]![MARKA] & [MAIN]![COMMENT] & [MAIN]![add] & [MAIN]![art]) Like "*71*"));

работает.....
что я делаю не так?????

Отмечаю особо - все это делаю в конструкторе....

Сообщение было отредактировано: 31 янв 20, 11:15
31 янв 20, 11:13    [22070198]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20001
Странно, что первый работает... сделай SELECT TOP 1 znper.znper.
31 янв 20, 11:19    [22070202]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 671
Akina
Странно, что первый работает... сделай SELECT TOP 1 znper.znper.

помогло.... спасибо!!!!
31 янв 20, 11:22    [22070206]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4603
Serg197311, а давно в Access можно применять точку с запятой в тексте запроса?
31 янв 20, 11:46    [22070223]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Serg197311
Member

Откуда: Жуковский
Сообщений: 671
Панург
Serg197311, а давно в Access можно применять точку с запятой в тексте запроса?

а она не просто в тексте запроса - она внутри вызова функции

Сообщение было отредактировано: 31 янв 20, 12:08
31 янв 20, 12:08    [22070238]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 446
WHERE (((IIf(Exists (SELECT znper.* From znper WHERE (((znper.codever)=vers.code) AND ((znper.codeper)=6));),(SELECT znper.znper From znper WHERE (((znper.codeper)=6) AND ((znper.codever)=vers.code));),Null)) Between 0.1 And 1));
Ваше условие , ИМХО, звучит так: Если в таблице znper есть записи по двум условиям, то тогда из этой же таблицы при тех же условиях возвращается значение поля "znper" (предположительно одной записи, но не факт даже с добавлением TOP 1), которое дополнительно проверяется на Between 0.1 And 1. Так? Не слишком ли сложно и запутанно?
Может попробуйте так?:
WHERE Exists (SELECT znper.* From znper WHERE (znper.codever=vers.code) AND (znper.codeper=6) And (znper.znper Between 0.1 And 1))
31 янв 20, 13:08    [22070279]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 446
Serg197311
Akina
Странно, что первый работает... сделай SELECT TOP 1 znper.znper.
помогло.... спасибо!!!!
Этот костыль решает проблему с ошибкой, но теоретически при наличии нескольких записей, отвечающим двум условиям, в которых значение поля только одной записи входит в интервал 01-1, этот TOP 1 может "вернуть не ту запись" (и, гад такой, наверняка так и сделает).
31 янв 20, 13:34    [22070292]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20001
Кривцов Анатолий
Этот костыль решает проблему с ошибкой, но теоретически при наличии нескольких записей, отвечающим двум условиям, в которых значение поля только одной записи входит в интервал 01-1, этот TOP 1 может "вернуть не ту запись" (и, гад такой, наверняка так и сделает).
Ну чтобы пофиксить сию проблему, нужен просто ORDER BY.
31 янв 20, 16:58    [22070424]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с запросом  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 446
Akina
Кривцов Анатолий
Этот костыль решает проблему с ошибкой, но теоретически при наличии нескольких записей, отвечающим двум условиям, в которых значение поля только одной записи входит в интервал 01-1, этот TOP 1 может "вернуть не ту запись" (и, гад такой, наверняка так и сделает).
Ну чтобы пофиксить сию проблему, нужен просто ORDER BY.
Вообще-то, я надеюсь, что ТС попробует мой вариант условия и ему понравится. Что касается ORDER BY, то в случае наличия записей с 0.05, 0.5 и 1.5 при любой сортировке вернется не та запись. А в случае 0.5, 0.5 и 1,5 (т.е. 0.5 дважды), то запрос захочет вернуть две записи (такая фишка у TOP), что приведет к ошибке уже при выполнении. ИМХО.
ЗЫ. Вот почему у ТС работает вариант с дополнительным LIKE - не догоняю.
31 янв 20, 17:39    [22070456]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить