|
|
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
Есть 6-7 таблиц в которых хранятся некие записи, сами таблицы однотипны нужно создать запрос типа след Select @cnt1 = count(*) From Tab1 Select @cnt2 = count(*) From Tab2 Select @cnt3 = count(*) From Tab3 Select @cnt4 = count(*) From Tab4 if @cnt1 > 0 begin Select ... 'Сбор. Ед' ... union Select [набор полей] from Tab1 end if @cnt2 > 0 begin if @cnt1 > 0 UNION /*вот эта строка как раз и не отрабатывает*/ Select ... 'Детали' ... union Select [набор полей] from Tab2 end и тд. У меня есть идеа о лесенке те if @cnt1 > 0 Begin if @cnt2 > 0 Begin ................ End else Begin ................ End End else Begin if @cnt2 > 0 Begin ................ End else Begin ................ End End в этой ситуации скорость вообщем-то неплохая, но длина кода меня не рабует, и к тому же порядка 128 вариантов готовить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 15:11:26 |
|
||
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
Ну ты довольно странный... С какой стати ОНО должно отрабатывать в новом операторе как будто-бы продолжение пред-предыдущего? накапливай весь нужный запрос в строке, уж потом его выполняй. Типа так: declare @sql varchar(1000) ... -- навороты с подсчётом @cnt1...n set @sql '' if @cnt1 > 0 begin if LEN(@sql) > 0 set @sql @sql+' UNION ' set @sql @sql+ 'SELECT Что-то from Кого-то' end if @cnt2 > 0 begin if LEN(@sql) > 0 set @sql @sql+' UNION ' set @sql @sql+ 'SELECT Что-то from Кого-то' end -- и выполнить потом всё это exec(@sql) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 15:22:22 |
|
||
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
Select @cnt1 = count(*) From Tab1 Select @cnt2 = count(*) From Tab2 Select @cnt3 = count(*) From Tab3 Select @cnt4 = count(*) From Tab4 Select 'Сбор. Ед' where @cnt1>0 union select что-то from From Tab1 union Select 'Детали' where @cnt2>0 union select что-то from From Tab2 union Select 'Прещепки' where @cnt3>0 union select что-то from From Tab3 union Select 'Мусорные баки' where @cnt4>0 union select что-то from From Tab4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 15:24:23 |
|
||
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
2LD А резулдьтат exec(@SQL) будет ли являться результатом самого запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 15:44:20 |
|
||
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
Объедини все однотипные таблицы в одну и поставть туда еще одно поле ID-ТогоЧемВсеТакиОниОтличаются. Проблем будет меньше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 16:03:55 |
|
||
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
Если объеденить однотипные таблицы в одну, кол-во проблем не уменьшится 1. У этих таблиц есть ФорейнКей на Главную таблицу, по которой строится дерево /можно конечно и таблицы "деревьев" тоже объединить, но это не катит/ 2. Выход из запроса болжен содержать некоторые строки, наличие которых определяется наличием записей в таблицах след. проблема остается 3. А простое объединение не подходит отсюда либо вариант "лесенка" либо что-то еще Если кто-то подскажет как сделать этот запрос через временную таблицу, то буду рад, но нужно предусмотреть возможность одновременного запуска запроса с нескольких компьютеров (до 20 штук) И я не знаю как именно общаться с временной таблицей /удаляется она после запроса или ее нужно отдельно удалять, если удаляется то сразу или через какоето время и тд и тп/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 16:17:05 |
|
||
|
Большая проблема с UNION
|
|||
|---|---|---|---|
|
#18+
Повторяю.Читай внимательно. Select @cnt1 = count(*) From Tab1 Select @cnt2 = count(*) From Tab2 Select @cnt3 = count(*) From Tab3 Select @cnt4 = count(*) From Tab4 Select 'Сбор. Ед' where @cnt1>0 union select что-то from From Tab1 union Select 'Детали' where @cnt2>0 union select что-то from From Tab2 union Select 'Прещепки' where @cnt3>0 union select что-то from From Tab3 union Select 'Мусорные баки' where @cnt4>0 union select что-то from From Tab4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2002, 16:18:45 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32041910&tid=1821280]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 342ms |

| 0 / 0 |
