Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Простейший запрос в sql server 2008 ограничение 100000 записей

Простейший запрос в sql server 2008 :
таблицы tab1 и tab2 имеют одинаковую структуру и находятся в разных базах данных

select * from baza1.dbo.tab1 from baza2.dbo.tab2

переносит из таблицы tab2 в таблицу tab1 только 100000 (сто тысяч записей).
а нужно перенести 1900000 (один миллион девятьсот тысяч записей).

как обойти ограничение ?
Ответ:
p672
Простейший запрос в sql server 2008 :
select * from baza1.dbo.tab1 from baza2.dbo.tab2
А ничего что ваш запрос синтаксически неверный и не перенесёт ни одной строки.

И что вернут вот эти два запроса?
select COUNT(*) from baza1.dbo.tab1 
select COUNT(*) from baza2.dbo.tab2
Вопрос: Запрос count в диапазоне между датами

Создаю запрос с подсчетом строк по значению. Необходимо чтобы выборка значений происходила в определенном диапазоне дат. Запрос выглядит следующим образом:
SQL
1
2
3
4
SELECT BASE.Район, COUNT(IIf([STATUS].[Возрастная группа]="дети" AND [STATUS].[Метод]="ОБРАЩЕНИЕ",11)) AS [дети обращение], COUNT(IIf([STATUS].[Возрастная группа]="подростки" AND [STATUS].[Метод ]="ОБРАЩЕНИЕ",11)) AS [подростки обращение], COUNT(IIf([STATUS].[Возрастная группа]="взрослые" AND [STATUS].[Метод ]="ОБРАЩЕНИЕ",11)) AS [Взрослые обращение], STATUS.[Дата]
FROM BASE LEFT JOIN STATUS ON BASE.ID = STATUS.SID
GROUP BY BASE.Район, STATUS.[Метод выявления], STATUS.[Дата]
HAVING (((STATUS.[Метод ])="ОБРАЩЕНИЕ") AND ((STATUS.[Дата]) BETWEEN Nz([Forms]![MAIN]![BASFORM]![Поле2],#1/1/1000#) AND Nz([Forms]![MAIN]![BASFORM]![Поле4],#1/1/3000#)));
Соответственно при формировании запроса строки содержат значение count для определенной даты.
Каким образом изменить запрос чтобы подсчет для дат не выводился, а даты находящиеся за пределами диапазона в отчет просто не попадали?
Ответ:
Сообщение от Capi
Ведь это условие уже проверилось в WHERE, отобраны только те записи, которые ему удовлетворяют.
Зачем снова проверять?
в WHERE аксесс почему то дописывает условие автоматом, да почему то запрос в таком виде работает раз через раз или вообще не работает. Почему ни как понять не могу.
Вопрос: Оптимизация запроса Count() group by

Добрый день.
Прошу помощи:

Есть запрос:

Код

SELECT c.id_categ, c.categ, count(o.id) AS count_
  FROM categ c, rubrika r, object o where c.id_categ=r.id_categ and r.id_rubrika=o.id_rubrika
GROUP BY c.id_categ
order by c.order_


explain: 

Время выполнения: 1,716 с очень долго

Я его переписал в:

Код

select id_categ, categ, (select count(o.id) from object o,rubrika r where o.id_rubrika=r.id_rubrika and r.id_categ=c.id_categ) count_ from categ c order by c.order_


explain: 

Время выполнения: 0,515 уже лучше, но всеравно долго

Дольше всего выполняется подсчет Count()

Как можно еще оптимизировать?
Ответ:
Код

SELECT c.id_categ, c.categ, count(o.id) AS count_
  FROM categ c, rubrika r, object o where c.id_categ=r.id_categ and r.id_rubrika=o.id_rubrika
GROUP BY c.id_categ
order by c.order_


Во-первых, используйте group by НОРМАЛЬНО, то есть, в group by должны быть все поля, которые не задействованы в агрегатных функциях. Mysql единственная база данных, которую я встречал, которая позволяет так "вольготно" и неправильно группировать. Во-вторых проставить индексы, где необходимо.
Вопрос: Зависает Access 2010 на простых запросах

Здравствуйте.
В общем начну из далека.

Кем-то, давно, была написана программа на Access. работала долго но стабильно
почти два года назад поменяли старый компьютер на новый (Intel I5 ОЗУ 4 Гб 1 Тб ЖД ).

Перенесли программу и на новую машину и она стала в разы быстрей работать (это не удивительно).
Проработала программа почти два года, без глюком и проблем, но буквально месяц назад стала зависать.
Висит мин 20-30 и выдает сообщение "недостаточно системных ресурсов".
Переустановил Windows 7, переустановил Access 2010. все тоже самое, зависает на простых запросах и потом выдает сообщение.

Переставил программу на другой старый компьютер, программа работает замечательно, не зависает.
Так пробовал на нескольких более старых машинах везде программа, медленно, но работает без зависаний.

Привожу пример запросов:

Код SQL
1
2
UPDATE ft INNER JOIN t_b_c ON ft.fl_c = d_b_c.chet SET d_b_c.vid = '*'
 WHERE (ft.fl_state='1') AND (NOT ft.T_Uved IS NULL)
или
Код SQL
1
2
3
4
5
6
INSERT INTO tmp_p_pt ( vid, sum1, gorod) SELECT d_b_c.vid,
 Round(SUM([pre_a_f_c]![C_T]+[pre_a_f_c]![R_T]+[pre_a_f_c]![A_T]+[pre_a_f_c]![L_T]+[pre_a_f_c]![S_T]
+[pre_a_f_c]![C_G]+[pre_a_f_c]![R_G]+[pre_a_f_c]![A_G]+[pre_a_f_c]![L_G]+[pre_a_f_c]![S_G]
+[pre_a_f_c]![ON])/1000,2) AS ca, d_b_c.t
  FROM ft INNER JOIN (d_b_c INNER JOIN pre_a_f_c ON d_b_c.c = pre_a_f_c.C) ON ft.C = d_b_c.c
  GROUP BY d_b_c.vid, d_b_c.t;
В общем в программе очень много запросов как простые так и сложные. Все запросы реализованы на VBA.
Количество записей разное, максимум 500 тыс.

Вопрос: что может быть с компом или системой или с Access , почему Access 2010 на этой машине зависает при простых запросах. Это касается не только этой программы, но и просто если создать новую базу данных и отдельно реализовать запрос Access может зависнуть.
Ответ:
Сообщение от texnik-san
А множество всех подмножеств данного множества?
Такой операции ТМ нет.
Есть, конечно, теорема Кантора: никакое множество X не равномощно множеству своих подмножеств. Но это же не операция.
Вопрос: ПРОЕКТИРОВАНИЕ ПРОСТЫХ ЗАПРОСОВ В СУБД

Нужно сделать:
– простой запрос по одной таблице;
¬– запрос, содержащий данные из нескольких таблиц;
– запрос с условием;
– запрос с параметром;
– итоговый запрос;
– перекрестный запрос;
– запрос с вычислением, задать новое имя для столбца с вычислениями;
– запрос на изменение (либо на добавление, либо на удаление, либо на обновление, либо на создание таблицы).
База данных в архиве.
Заранее благодарен
Ответ: Двоечник
Вопрос: Sybase IQ, тормозит простой запрос

Здравствуйте.
IQ 16 (Sybase IQ/16.0.0.653/131122/P/sp03/MS/Windows 2003/64bit/2013-11-22 02:25:22)
Есть две таблицы
ent_bll ~ 118 355 строк
ent_sertificate ~ 2239254 строк

простой запрос

select 
ent_bll.bll_date,
ent_bll.dest_country_name,
sum(ent_bll.weight_gross),
ent_bll.cargo_name,
ent_bll.dest_country_code,
ent_sertificate.consumer_name
from ent_bll,ent_sertificate
where ent_bll.bll_date >= '20130101'
and   ent_bll.bll_item_code = ent_sertificate.waybill_item_code
group by
ent_bll.bll_date,
ent_bll.dest_country_name,
ent_bll.cargo_name,
ent_bll.dest_country_code,
ent_sertificate.consumer_name


по полям джойна ent_bll.bll_item_code, ent_sertificate.waybill_item_code сделаны HG индексы
по полю ent_bll.bll_date сделан Datetime индекс.
количество возвращаемых строк примерно 1 500

Проблема в том что запрос исполняется долго(25-30 сек).
На мой взгляд это как то медленно.
План в аттаче!

К сообщению приложен файл (iq.xml - 68Kb)
Ответ: > IQ 16 (Sybase IQ/16.0.0.653/131122/P/sp03/MS/Windows 2003/64bit/2013-11-22 02:25:22)



И поставить последний SP - 08 если помню и последний патч. Лишним не будет
Вопрос: Простой запрос без процедуры if/then/else

Приветствую!

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

С db2 работаю аж 3 дня, простите если вопрос тривиальный.
Вот запросы, которые я пробовал.

BEGIN ATOMIC
IF (NOT EXISTS(
SELECT 1 FROM SYSCAT.COLUMNS WHERE TABNAME ='TEST_TABLE' AND COLNAME = 'TEST2'))
THEN
EXECUTE IMMEDIATE 'alter table ... add ...'!
END IF!
END
GO
--#SET DELIMITER ;


====================

BEGIN ATOMIC
IF (NOT EXISTS(
SELECT 1 FROM SYSCAT.COLUMNS WHERE TABNAME ='TEST_TABLE' AND COLNAME = 'TEST2'))
THEN
alter table ... add ... ;
END IF;
END
GO
========================================
IF
(
NOT EXISTS
(
SELECT 1
FROM SYSCAT.COLUMNS
WHERE
TABSCHEMA = 'TMRO'
AND TABNAME ='test_table'
AND COLNAME = 'test_column'
)
)
THEN
alter table ... add ... ;
END IF;
Ответ: slitvin,

)))
Это то , что Марк и предлагал.
BEGIN NOT ATOMIC ... END = BEGIN ... END
Вопрос: Простой запрос и проблема с join

Добрый день!

Есть простой запрос:
DECLARE @otID int = -4990;

        SELECT otAPB, otName, otAddress, otAddressR, otPhones, otName1, otSkid, otEmail, goID, otBAD, otSumOst, otBoss, otINN, otOKPO, otDesc As otDescPhone, Otdel.usiID, otKPP,
               otNew, otPassSer, otPassNom, otPassDate, otPassKem, otIDPlat, otBD, otDate,
               otCredit, otCreditDate, otPhoneCell, otClose,
               usKey,
               DCard.dcID, dcNomer, dcSkid
        FROM Otdel WITH (noLock)
            LEFT OUTER JOIN Users WITH(noLock) ON Users.otID = Otdel.ID
            LEFT OUTER JOIN DCard WITH(noLock) ON Otdel.ID = DCard.otID
        WHERE Otdel.ID = @otID;


При выполнении запроса, в плане, пишется предупреждение "No Join Predicate". С чем это связано и как с этим можно побороться?

К сообщению приложен файл (noJoinPredicate.sqlplan - 51Kb)
Ответ:
TaPaK
вопрос он задал другой

на его вопрос уже отвечено:
ваш таксидермист вовсе не министр, он на такси дерьмо развозит
его LEFT JOIN-ы это замаскированный CROSS JOIN,
в котором нет условия соединения.
так что кто не хочет нытья сервера по этому поводу, переписывает через CROSS JOIN,
потому что если даже написал какие-то условия, которые совсем и не условия LEFT-соединения, то ССЗБ
Вопрос: Простой запрос на выборку и подсчёт

Здравствуйте. Прощу помочь в формировании простого запроса, который отобразит последние 10 комментариев, при этом покажет кто именно оставил комментарий, покажет сам текст комментария и количество сколько всего оставил комментариев тот или иной пользователь.
Т.е. есть таблица
1 - Паша - Текст1
2 - Вася - Текст2
3 - Сергей - Текст3
4 - Никита - Текст4
5 - Паша - Текст5
6 - Паша - Текст6
....
N - Юзер Коммент N


Должно вывести:
Паша - 3 коммента - Текст6
Паша - 3 коммента - Текст5
Никита - 1 коммента - Текст4
Сергей - 1 коммента - текст3
Вася - 1 коммент - текст2
Паша - 3 коммента - текст1
......
Ответ:
Gamletus
Я потом показал свой вопрос более полным.

Не более полным, а совершенно изменил задачу. Мой вариант даёт решение первой задачи и никакого отношения не имеет ко второй.
Вопрос: Подскащите с простым запросом по COUNT

Добрый день!

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

Код

CREATE TABLE IF NOT EXISTS `test6` (
  `param` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `test6`
--

INSERT INTO `test6` (`param`) VALUES
(0),
(1),
(2),
(3),
(4),
(5),
(0),
(0);


Необходимо выбрать количество столбцов с param=0, и количество всех остальных столбцов. Первое что приходит на ум:

Код

(SELECT COUNT(1) FROM `test6` WHERE param=0) UNION (SELECT COUNT(1) FROM `test6` WHERE param>0)


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

ЗЫ: для упрощения создал тестовую таблицу, в реальной там еще хороший хвост в WHERE - который при таком UNION еще придется и дублировать...

Это сообщение отредактировал(а) maxipub - 18.5.2017, 16:25
Ответ:
Проверка условия даёт True либо False. При использовании в числовом контексте (а SUM требует именно этого) они конвертируются в 1 и 0 соответственно.