|
MS SQL Условие по условию | ☑ | ||
---|---|---|---|---|
0
zenik
19.02.16
✎
11:53
|
Помогите с запросом плз. База на MSSQL 2005.
SELECT * FROM Таблица AS A WHERE A.R22 IN ( SELECT ID FROM CashFR WHERE CashID = @CashID ) Как бы сделать так, что если ID FROM CashFR = NULL, то этого условия не было и из таблицы бы черпалось все. Сейчас сделано два разных запроса один с этим условием, другой без него... Хотелось оптимизировать. |
|||
1
ObjectRelation Model
19.02.16
✎
11:55
|
так что ли?
SELECT * FROM Таблица AS A WHERE A.R22 IN ( SELECT ID FROM CashFR WHERE CashID = @CashID UNION ALL SELECT ID FROM CashFR WHERE CashID IS NULL) |
|||
2
zenik
19.02.16
✎
11:58
|
Ну да :) Спасибо.
|
|||
3
zenik
19.02.16
✎
12:00
|
А не...
|
|||
4
zenik
19.02.16
✎
12:03
|
@CashID - у меня всегда имеет значение.
CashFR - Для каждой @CashID хранит 0,1,2 В идеале: если CashFR для @CashID = 0 - то условие на "Таблицу" не распространяется. В таблице в этом поле тоже в принципе 1 или 2 (0 в ней нет). |
|||
5
ObjectRelation Model
19.02.16
✎
12:05
|
ничего не понял
CashFR это таблица же |
|||
6
rs_trade
19.02.16
✎
12:09
|
Погугли динамический СКЛ. Если я все верно понял.
|
|||
7
zenik
19.02.16
✎
12:09
|
На пальцах:
Таблица ID,R22 1|1 2|1 3|2 CashFR ID|CashID 1|1 1|2 2|1 3|0 Для CashID = 1 Надо получить ID Таблица 1,2,3. Для CashID = 2 Надо получить ID Таблица 1,2. Для CashID = 3 Надо получить ID Таблица 1,2,3. |
|||
8
zenik
19.02.16
✎
12:10
|
Поправочка
CashFR CashID | ID |
|||
9
ObjectRelation Model
19.02.16
✎
12:18
|
и еще 0 или NULL там?
|
|||
10
zenik
19.02.16
✎
12:20
|
(9) Да без разницы... По ситуации подстроюсь. Если с null проще - то сделаем null :)
|
|||
11
zenik
19.02.16
✎
12:22
|
т.е. Могу сделать так:
CashFR CashID|ID 1|1 1|2 2|1 3|NULL или так: CashFR CashID|ID 1|1 1|2 2|1 Результат должен остаться прежним. |
|||
12
Jonny_Khomich
19.02.16
✎
12:24
|
Вот ты работник хороший. Решил оптимизировать на что можно глаза закрыть и потратил 2 часа, а ещё потратишь 2 часа чтобы внедрить и протестировать
|
|||
13
zenik
19.02.16
✎
12:27
|
(12) Как я уже сказал выше, сейчас это реализовано через разные процедуры. Для внесения изменений - надо править 2 процедуры... и тестировать потом тоже 2... А сейчас предстоит переделать эти две процедуры, вот и решил начать с небольшой оптимизации.
|
|||
14
ObjectRelation Model
19.02.16
✎
12:32
|
SELECT * FROM Таблица AS A
WHERE A.R22 IN ( SELECT ID FROM CashFR WHERE CashID = @CashID ) OR @CashID IS NULL |
|||
15
trad
19.02.16
✎
12:33
|
declare @Таблица table(ID int, R22 int)
insert into @Таблица select 1,1 union all select 2,1 union all select 3,2 declare @CashFR table(CashID int, ID int) insert into @CashFR select 1,1 union all select 1,2 union all select 2,1 union all select 3,null declare @CashID int set @CashID = 1 while(@CashID<=3) begin SELECT A.ID FROM @CashFR as CashFR left join @Таблица AS A on A.R22 = CashFR.ID or CashFR.ID is null WHERE CashFR.CashID = @CashID set @CashID = @CashID+1 end |
|||
16
trad
19.02.16
✎
12:34
|
ID
----------- 1 2 3 (3 row(s) affected) ID ----------- 1 2 (2 row(s) affected) ID ----------- 1 2 3 (3 row(s) affected) |
|||
17
zenik
19.02.16
✎
12:43
|
(15) Спасибо, я идею понял... Но запрос сложнее намного, и так кардинально его переделывать не хотелось бы
(14) Спасибо. Вроде что то близкое. Попробую доделать под задачу. |
|||
18
trad
19.02.16
✎
12:48
|
(17) видимо не понял
сам запрос SELECT A.ID FROM @CashFR as CashFR left join @Таблица AS A on A.R22 = CashFR.ID or CashFR.ID is null WHERE CashFR.CashID = @CashID остальное обвязка для теста |
|||
19
zenik
19.02.16
✎
13:04
|
(18) да не я все понял... В начале у тебя заполнение тестовых данных. :) В принципе у меня получается через OR в скобках. Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |