powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка в цикле
17 сообщений из 17, страница 1 из 1
Выборка в цикле
    #39864755
hunty82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, sqlчане!

Кто может подсказать.

Есть таблица tt

Country || City || Столица

Россия || Казань
Россия || Москва
Россия || Саратов
США || Вашингтон
Германия || Берлин
Германия || Дрезден
Германия || Франкфурт
Франция || Ницца

Запрос вида (одна стран-один город) идет во внешнюю систему. Оттуда приходит крыж, если столица "да" иначе пусто. В виде xml (страна - да), но можно и в sql таблицу записать.

По тем странам, по которым пришел ответ "да", запрос не отправлять.
Следующий запрос такой же отправлять, но уже страну с другим городом если есть.

Подскажите Каким образом можно реализовать данную выборку?


На ум приходит добавить поле Флаг в таблицу.

Пока кол-во записей >0
Запрос.
Если пришел ответ "да",
то update флаг=1 по полю страна,
если пусто то update флаг=1 по полю страна и город.

Select country, max(city) from tt where flag=0 group by city order by city

Но можно и правильно ли так релизовать select в цикле непонятно.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864765
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82,

Курсор же, а не цикл.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864771
hunty82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курсор работате для каждой строки.
А тут необходимо оптимально минимальное кол-вом запросов.
Т.е первый запрос отправит:
Россия-Казань
США-Вашингтон
Германия-Берлин
Франция- Ницца

Ответ придет по США и Германии

Второй запрос
Россия-Москва

И все.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864778
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82,

ну и отправляйте, по одной стране пока не получите +, потом следующую. Sql тут что делать должне
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864787
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82,

Опять зашел любитель циклов в БД. Может надо теорию БД почитать сначала и по-другому начать мыслить.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864790
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, страны уже начали столицы как перчатки менять?
https://ru.wikipedia.org/wiki/Список_столиц_мира

Ну а если задача "высосана" из пальца, и там совсем другое, то CURSOR вам в руки
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864860
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82Курсор работате для каждой строки.
А тут необходимо оптимально минимальное кол-вом запросов.В исходном посте вы описали действия "на каждую строку".
Или вам нужно одним запросом сделать какую то выборку?
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864877
hunty82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице могут быть несколько тысяч записей. Страна и город как пример.
Выборка группировкой по странам и городам одним запросом сразу по всем. Т.е не на каждую строчку

Я не любитель циклов, просто приходит на ум только такое действие и понимаю, что в бд это довольно коохозно. Поэтому и спросил.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864885
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82Выборка группировкой по странам и городам одним запросом сразу по всем. Т.е не на каждую строчкуТак и делайте одним запросом.
Непонятно, в чём вопрос.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39864931
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82,

«В правильно сформулированном вопросе содержится половина ответа»(с)

Попробуйте переформулировать ваш вопрос в соответствии с рекомендациями, пункт 6 . На адекватном репрезентативном, а не абстрактном, наборе данных.
И не нужно рассказывать, КАК вы пытаетесь решить задачу. Лучше сосредоточитесь на том, что есть и что должно получиться после всех ваших манипуляций.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39865756
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82,

"Внешняя система" - это что? Если таблица в linked server, можно построить выборку с соединением по стране и признаку "столица".
...
Рейтинг: 0 / 0
Выборка в цикле
    #39865962
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82,

Задача чисто академическая и явно высосона из пальца. Внешняя система которая принимает запрос в таком виде это полный бред. По стране(ам) она должна возвращать столицу. Все! Скажите вашему преподу чтобы убился головой об стену.

Но если уж очень хочется - делайте как описали с флагом. В тупом цикле (никаких курсоров) по условию EXISTS(SELECT * FROM tt WHERE flag =0)
...
Рейтинг: 0 / 0
Выборка в цикле
    #39866034
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindСкажите вашему преподу чтобы убился головой об стену.
А вдруг он и есть препод?
...
Рейтинг: 0 / 0
Выборка в цикле
    #39866055
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполняем

Код: sql
1.
2.
3.
4.
WITH cte AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY country ORDER BY city) rn
             FROM source
             WHERE capital IS NULL)
SELECT country, city FROM cte WHERE rn=1


Отправляем.
Получаем ответ.
Далее для тех, на кого пришёл ответ, проставляем в поле capital единицу, остальным ноль. Типа


Код: sql
1.
2.
UPDATE source
SET capital = CASE WHEN EXISTS (SELECT 1 FROM answer WHERE answer.city = source.city) THEN 1 ELSE 0 END)


Повторяем, пока первый запрос возвращает хотя бы одну запись.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39866075
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, UPDATE должен апать только те записи, которые попали в отправленную выборку. Но это, надеюсь, Вы сможете поправить?
...
Рейтинг: 0 / 0
Выборка в цикле
    #39866615
hunty82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо. Попробую.

Запрос в виде xml отправляется во внешнюю систему (не sql), оттуда приходит также xml с ответом. Парсится и записывается в таблицу. Необходимо наименьшее оптимальное кол-во запросов для заполнения всех записей.

Не препод и не студнет. По факту в задаче конечно не города и страны,а узко экономические показатели, но смысл такой же, они просто более художественны в восприятии.
...
Рейтинг: 0 / 0
Выборка в цикле
    #39866646
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hunty82Необходимо наименьшее оптимальное кол-во запросов для заполнения всех записей.Это относится не к оптимальному написанию запросов к MSSQL, а к взаимодействию с этими внешними системами.

Например, если системы позволяют написать "групповой запрос", то можно группировать запрос по системам, и отсылать по одному запросу на систему.

Если же такой возможности нет, то "наименьшее кол-во запросов для заполнения всех записей" будет равно количеству записей, какие ещё варианты?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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