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

Откуда:
Сообщений: 25
Имеется запрос, состоящий из сте + тяжелого запроса, который потом джойнится с сте:

with tbl()

select * from t1 join tbl


Реальна ли ситуация, когда данные сте при объединении будут пустыми (при наличии данных)? Проблема возникает не постоянно.

Запрос выполняется из report server.

Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Или чудес не бывает?
26 мар 15, 14:44    [17435322]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Не бывает, нерекурсивный CTE - просто обертка.
26 мар 15, 15:03    [17435467]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
philipp1

Реальна ли ситуация, когда данные сте при объединении будут пустыми (при наличии данных)? Проблема возникает не постоянно.



Да, реальна.

Может вам надо про LEFT JOIN почитать, если вам важно, чтобы данные всегда были.
26 мар 15, 15:12    [17435530]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
o-o
Guest
если кривое условие соединения, то сколько угодно:
with tbl as(select -1 as col union all select -2)
select * from sys.databases d join tbl t on d.database_id = t.col

когда появятся базы с отрицательными database_id или же я в tbl занесу 1,2,3, строки вернутся
26 мар 15, 15:26    [17435618]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
philipp1
Member

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

Мне именно inner нужен.

Реальна она за счет чего? Данные присутствуют, условия все верные. Если запрос еще раз дернуть - отработает как надо.
26 мар 15, 15:38    [17435691]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
philipp1
Member

Откуда:
Сообщений: 25
Владислав Колосов,
Т.е. копать в сторону наличия данных?
26 мар 15, 15:40    [17435703]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
philipp1
a_voronin,

Мне именно inner нужен.

Реальна она за счет чего? Данные присутствуют, условия все верные. Если запрос еще раз дернуть - отработает как надо.


Любая таблица, вьюха, запрос или подзапрос (включая CTE) могут содержать или не содержать строк. При INNER JOIN вы получите строки только если запись есть в обоих и они джойняться по условию. Если строк нет или они не джойняться, то строк не будет.
26 мар 15, 15:55    [17435806]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
philipp1
Member

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

Про джойны я все понимаю.

Я спрашиваю возможна ли ситуация, когда при наличии данных сте по какой либо причине не вернула значения?
26 мар 15, 16:22    [17436014]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
philipp1
при наличии данных сте


Что такое "при наличии данных" и как определяете это наличие? Как в CTE могут быть данные, так, чтобы она их не вернула?
26 мар 15, 16:24    [17436030]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
philipp1
Member

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

Есть таблица, в которой есть данные. Наличие определяем селектом. сте их выбирает. Далее после продолжительной обработки подцепляется сте. На этом этапе возможна ситуация когда она пустая?
26 мар 15, 16:35    [17436090]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
philipp1
a_voronin,

Есть таблица, в которой есть данные. Наличие определяем селектом. сте их выбирает. Далее после продолжительной обработки подцепляется сте. На этом этапе возможна ситуация когда она пустая?


Нет. Может вам наконец построить план запроса и не стрелочках посмотреть откуда куда там сколько записей поступает?

Либо хотя бы выполните запрос A, потом запрос B, потом запрос A JOIN B
26 мар 15, 16:38    [17436100]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
yesMan
Member

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

Запрос из RS в "студию".

предполагаю проблема в подставляемых параметрах.
Ну или трассировка даст ответы.
26 мар 15, 17:02    [17436259]     Ответить | Цитировать Сообщить модератору
 Re: Пустой CTE при наличии данных  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
philipp1
a_voronin,

Про джойны я все понимаю.

Я спрашиваю возможна ли ситуация, когда при наличии данных сте по какой либо причине не вернула значения?
Ваш вопрос из разряда - возможно ли чтобы конструкция
If (1=1) then true else false
вернула бы false?
26 мар 15, 22:39    [17437684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить