Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459

И снова составить сложный запрос

03.07.2014, 15:33. Показов 1161. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые гуру SQL! Помогите, пожалуйста, составить сложный запрос к БД.
Вот есть у меня такой запрос:
SQL
1
SELECT DISTINCT name FROM kpp_temp WHERE REFDES LIKE 'R[0-9]%'
т.е. получаем имена не важно чего с текстом в поле REFDES, удовлетворяющий условию LIKE 'R[0-9]%'
Дальше я в своей программе, как истинный чайник SQL, забиваю ответы в массив и потом в цикле выполняю следующий запрос
SQL
1
2
3
SELECT FN1,FN2,FN3,FN4,FN5,FN6,FN7,FN8,FN9,FN10,FN11,FN12,FN13,FN14,FN15,FN16 FROM Res_Rus WHERE [Manf PN]='" + q.Peek() + "' 
UNION ALL 
SELECT FN1,FN2,FN3,FN4,FN5,FN6,FN7,FN8,FN9,FN10,FN11,FN12,FN13,FN14,FN15,FN16 FROM Resistors WHERE [Manf PN]='"+q.Peek()+"'"
Уточню q.Peek() здесь - это я достаю из массива данные полученные в предыдущим запросе
Опять же забиваю ответы из полученного второго запроса в массив и выполняю в цикле следующий(заключительный) запрос
SQL
1
UPDATE kpp_temp SET FN1='" + answer[0] + "',FN2='" + answer[1] + "',FN3='" + answer[2] + "',FN4='" + answer[3] + "',FN5='" + answer[4] + "',FN6='" + answer[5] + "',FN7='" + answer[6] + "',FN8='" + answer[7] + "',FN9='" + answer[8] + "',FN10='" + answer[9] + "',FN11='" + answer[10] + "',FN12='" + answer[11] + "',FN13='" + answer[12] + "',FN14='" + answer[13] + "',FN15='" + answer[14] + "' WHERE name='" + q.Peek() + "'
т.е. обновляю данными, полученными от второго запроса, другую таблицу

И собственно вопрос: Можно ли как-то эту логику объединить в один запрос? Или хотя бы в два Подскажите, пожалуйста как, если можно!
Заранее спасибо
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2014, 15:33
Ответы с готовыми решениями:

Составить сложный запрос
Помогите пожалуйста! задача такая - Вывести полную информацию: Здания в каждом районе, где число квартир, в которых на одного жильца...

Составить сложный запрос
Структура БД (РИС1): Написать запрос, возвращающий следующую информацию по работающим дистрибьюторам(РИС2): В общем начал делать,...

Помогите составить сложный запрос
Необходимо составить сложный запрос на основе формы поиска. Имеется форма поиска с полями со списками. При выборе конкретных...

8
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
03.07.2014, 16:18
супер мудрое задание и абсолютно непонятное
0
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
03.07.2014, 16:25  [ТС]
shanemac51, А что конкретно не понятно, на мой взгляд, подробно описал? Хотя со стороны виднее.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
03.07.2014, 17:09
вы знаете структуру и содержание таблиц
остальные же должны об этом догадываться?
===
у меня подобной задачи не было
по-этому представить ситуацию я не в состоянии

запросы вроде логически правильные, но чтобы постороннему человеку решить задачу -- ему надо понять задачу(особенно это касается запроса 1)

--из таблицы 1 нечто выбирается, накой-то перечень (1 поле)
--затем по этому перечню(видимо) сливаются 2 таблицы (15 полей)--- возможно запрос формируется в коде VBA
--и результат обновляет таблицу 1 пока NAME чему то равно(15 полей)

экзотика !
1
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
03.07.2014, 19:15
es_, в принципе можно сделать, но конечный запрос будет не обновляемым.

Проясните такой вопрос.
Предположим, что в таблице kpp_temp существует несколько записей (N) со значением поля name равным nameX. Первым запросом нашли это nameX. Вторым запросом в UNION объединении нашли несколько записей (M), значения поля [Manf PN] которых равны nameX.
Теперь вопрос: как сопоставить записи (M штук) из второго запроса записям (N штук) таблицы kpp_temp при обновлении?
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
03.07.2014, 20:01
но вы выбираете SELECT DISTINCT name FROM kpp_temp WHERE REFDES LIKE 'R[0-9]%'

по REFDES
0
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
03.07.2014, 20:28  [ТС]
Спасибо за ответы!
shanemac51, Вы всё правильно поняли. Именно это я и хочу. Мне нужно было скинуть структуру таблицы для лучшего понимания. Виноват, исправлюсь
minob,
Цитата Сообщение от minob Посмотреть сообщение
как сопоставить записи (M штук) из второго запроса записям (N штук) таблицы kpp_temp при обновлении?
Если я правильно понял ваш вопрос, то мой ответ таков:
При объединении таблиц
SQL
1
UNION
Мне не важно, что там находится. Хоть абсолютно идентичные записи, хоть полностью пустые
Из этого объединения таблиц я беру нужные мне поля и ими обновляю первоначальную таблицу где из объединения [Manf PN]=первой таблице [name]
В реале же в Res_Rus.[Manf_PN] и в Resistors.[Manf_PN] - нет одинаковых записей. И даже если они и будут то пускай запрос обновит kpp_temp два раза и в итоге в kpp_temp будет последняя запись.
Так что не обращайте на эти нюансы внимание.
Выше я описал логику - она работает как мне надо, но хотелось бы выполнить её одним запросом или, если это не возможно, то двумя для повышения скилла в SQL и для красоты кода в приложении

shanemac51, DISTINCT можно опустить там тоже не будет одинаковых записей, это я сделал для перестраховки, сейчас это не актуально
Почему я делаю объединение: Потому что [Manf PN]=kpp_temp.[name] может быть либо в таблице Res_Rus либо в Resistors
И чтобы два раза не обращаться с одним и тем же запросом к разным таблицам(т.е. опять будет два запроса вместо одного) я делаю объединение
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
03.07.2014, 21:06
Лучший ответ Сообщение было отмечено es_ как решение

Решение

es_, при наличии объединения UNION запрос будет не обновляемым. Разбейте на два запроса. С учетом всего Вами сказанного, пример первого
SQL
1
2
3
4
5
UPDATE kpp_temp AS T INNER JOIN Res_Rus  AS Q ON Q.[Manf PN]=T.[name] 
SET T.FN1=Q.FN1, T.FN2=Q.FN2, T.FN3=Q.FN3, T.FN4=Q.FN4, T.FN5=Q.FN5, T.FN6=Q.FN6, 
T.FN7=Q.FN7, T.FN8=Q.FN8, T.FN9=Q.FN9, T.FN10=Q.FN10, T.FN11=Q.FN11,  T.FN12=Q.FN12, 
T.FN13=Q.FN13, T.FN14=Q.FN14, T.FN15=Q.FN15, T.FN16=Q.FN16
WHERE T.REFDES LIKE 'R[0-9]%'
Второй аналогичный с заменой Res_Rus на Resistors.

Вполне возможно, что и они будут не обновляемые. Не имея БД, которую обещали выложить, ничего конкретного сказать не могу.
1
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
03.07.2014, 21:23  [ТС]
minob, Большое спасибо! ТО что нужно, а то я никак сообразить не мог
БД скинул, если вдруг появятся ещё более гениальные идеи, напишите, пожалуйста
П.С. почему то у меня в приложении всё правильно находит с такой конструкцией 'R[0-9]%' Но если же работать непосредственно из Microsoft Access то возвращает 0 записей, там работает так 'R[0-9]*'
Вложения
Тип файла: rar Central_Library.rar (83.5 Кб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.07.2014, 21:23
Помогаю со студенческими работами здесь

Как составить сложный запрос со счетчиком
Пожалуйста помогите с базой данных . Нужно доделать раздел статистики(Форма СТ), сортировка по дате и счетчик подсчета записей работают. Но...

сложный запрос (для меня сложный)
Есть таблица с продажами услуг от разных фирм, есть таблица с оплатой за предоставленные услуги (при этом сумма оплат может не совпадать с...

Составить сложный запрос
Срочно нужно составить сложный запрос В таблице RPM_ZONE_FUTURE_RETAIL хранятся изменения цен на уровне товар/ценовая зона...

Составить сложный SQL запрос
Всем привет. Возник вопрос, который уже битый час не могу решить. Нужно составить SQL-запрос, который к тексту в строке добавит в...

нужно составить сложный запрос
доброе время суток. суть такова, структура базы приблизительно такая: Cid|Money 1 | 105 2 | -300 3 | 250 4 | 400 5 | 220...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru