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

Откуда: от верблюда
Сообщений: 428
есть примерно такая структура
select
    f1 ...
from
    t1
join
    t2
on t1.f1 = t2.f2
    and
    t2.f3 = (select f5... from t3...)
    or
    t2.f4 = (select f6... from t3...)
where
...


можно ли узнать какому из условий удовлетворила строка, попавшая в результат?
t2.f3 = (select f5... from t3...)
или
t2.f4 = (select f6... from t3...)

может можно как-то промаркировать эту строку? Картинка с другого сайта.
25 июл 13, 14:59    [14616620]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
TJ001,

а приджойнить t3 что мешает?
А в списке полей SELECTа CASE написать?
25 июл 13, 15:03    [14616664]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
TJ001,

1) case
2)

 t1.f1 = t2.f2
    and
[b]([/b]
    t2.f3 = (select f5... from t3...)
    or
    t2.f4 = (select f6... from t3...)
[b])[/b]
25 июл 13, 15:08    [14616700]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
t1.f1 = t2.f2
and
(
t2.f3 = (select f5... from t3...)
or
t2.f4 = (select f6... from t3...)
)
25 июл 13, 15:09    [14616706]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
iap,
t3 не подключаю ибо там
select
    f1 ...
from
    t1
join
    t2
on t1.f1 = t2.f2
    and
    t2.f3 = (select max(f5) from t3 where...)
    or
    t2.f4 = (select max(f6) from t3 where...)
where
...

извиняюсь, что не не указал сразу все от и до

потребовалось расширить примерно так
select
    f1 ...
from
    t1
join
    t2
on t1.f1 = t2.f2
    and
    t2.f3 = (select max(f5) from t3 where...)
    or
    t2.f3 > 0
    or
    t2.f4 = (select max(f3) from t3 where...)
    or
    t2.f4 > 0
where
...


т.е. при таком раскладе результат будет в любом случае, но как понять вернется он удовлетворив MAX() или > 0?

еще раз извиняюсь за неточность первого поста
25 июл 13, 15:18    [14616767]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
или джойнить этот max(), а потом через case сравнивать?
25 июл 13, 15:21    [14616786]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
Ramis
Member

Откуда:
Сообщений: 99
TJ001,

select    f1 ..., case(...)
from  t1
join t2 on t1.f1 = t2.f2  and
join t3 on (t2.f3 = t3.f5 or  t2.f4 = t3.f4)
where
25 июл 13, 15:23    [14616804]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
TJ001,

например, написать CROSS APPLY для одного MAX,
написать CROSS APPLY для другого MAX,
а эти MAXы сравнивать с f3,f4 в CASE в списке полей SELECTа?
25 июл 13, 15:24    [14616814]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
CROSS APPLY - это если подзапросы коррелированные, разумеется.
Условия же Вы засекретили
25 июл 13, 15:25    [14616826]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
iap,

нет никакого секрета, просто там много всячины не имеющей отношения к делу, вот и решил не вываливать сюда

да, подзапросы коррелированные

(select max(f5) from t3 where t1.f1=t3.f1)


имею
Microsoft SQL Server 2000 - 8.00.2187 (Intel X86)
cross appl y меня не заработает и придется городить с темпами и инсертами? :(
25 июл 13, 15:42    [14616963]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
TJ001
имею
Microsoft SQL Server 2000 - 8.00.2187 (Intel X86)
cross appl y меня не заработает и придется городить с темпами и инсертами? :(
Динозавр! Предупреждать надо было!

Можно в подзапросе написать (SELECT t3.f1,MAX(t3.f5) FROM t3 GROUP BY t3.f1)T(f1,m)
а связывать в ON JOINа во FROMе уже снаружи.
Оптимизатор, в принципе, не дурак...
25 июл 13, 15:49    [14617008]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в результирующем поле увидеть по какому из условий получилась выборка?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 428
iap,

буду пробовать, спасибо! :)
25 июл 13, 15:51    [14617020]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить