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

Откуда:
Сообщений: 334
есть таблица
create table [data]
(
[id] int not null,
[id_s] int not null
)


как получить список [id], для которых присутствуют ВСЕ значения из списка [id_s]?
То есть чтоб работало условие типа where [id_s] in (13, 15, 18, 45).
22 фев 13, 15:14    [13967443]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
SELECT
  id
FROM
  [data]
WHERE
  where [id_s] in (13, 15, 18, 45)
GROUP BY
  id
HAVING 
  COUNT(DISTINCT id_s = 4)
22 фев 13, 15:20    [13967488]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
=Сергей=
Member

Откуда:
Сообщений: 334
ТОЧНО! Спасибо!
22 фев 13, 15:27    [13967555]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
RomanSamara10
Member

Откуда:
Сообщений: 6
Подскажите пожалуйста как правильно написать скрипт. Ситуация такая: есть перечень номеров (они все время разные) - выбираются селектом из базы по условиям. По каждому номеру отдельно нужно внести изменения в кучу других таблиц
ПРИМЕР: в эти таблицы вносим изменения
(update eo12 set m1 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo12 set m1 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo18 set s8 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo62 set g5 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo17 set h2 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo13 set m5 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo10 set w1 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo52 set x2 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529) и т.д.)

выбираю перечень номеров: select nomer from EO55 where d7 = 40, and r5 = 90
результат (52529, 56234, 25148, 10238, 80236, 29105, ........) -их бывает много

Хотелось бы узнать можно ли в один скрипт включить и select и update и полностью автоматизировать скрипт. Что бы при запуске он находил записи по условиям и обрабатывал каждую запись отдельно. Заранее благодарен всем за помощь
22 фев 13, 16:43    [13968029]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
RomanSamara10,

можно

update ... from table join ...
22 фев 13, 16:56    [13968107]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
RomanSamara10
Member

Откуда:
Сообщений: 6
хочу поставить скрипт на расписание. желательно чтоб это был цикл.(обработка каждого номера отдельно, т.к. иногда добавляю условия к update, да и в селекте иногда правлю) Если можно подробнее пример. Только начинаю осваивать sql. Заранее благодарен
22 фев 13, 17:10    [13968168]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гость333
Member

Откуда:
Сообщений: 3683
RomanSamara10
желательно чтоб это был цикл
Только начинаю осваивать sql.

В SQL циклы как раз нежелательны, т.к. SQL — это язык обработки множеств.

Можете расшифровать, что кроется здесь за многоточиями?
update eo17 set h2 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
update eo13 set m5 = ... where nomer = 52529 and d1 = (select d1 from eo53 where nomer = 52529)
22 фев 13, 17:15    [13968184]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Одним оператором update нельзя изменить данные в разных таблицах, поэтому все равно придется копипастить изменения для каждой таблицы.
Другое дело, что для каждой таблицы можно не указывать номера вручную, а объединить по JOIN с таблицей EO55, то есть что-то вроде этого:
update eo12 set m1 = ... 
   from EO55 
   join eo53 on eo53.nomer = EO55.nomer
   join eo12 on eo12.nomer = EO55.nomer and eo12.d1=eo53.d1
   where EO55.d7 = 40 and EO55.r5 = 90
22 фев 13, 17:41    [13968320]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
RomanSamara10
Member

Откуда:
Сообщений: 6
Гость333
Можете расшифровать, что кроется здесь за многоточиями?

там некое значение, которое тоже выбирается из других таблиц . Т.е. вместо ... для первого update
(select h2 from eo200 where nomer = 52529)
22 фев 13, 18:36    [13968612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить