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

CREATE TABLE [dbo].[Attribute](
[ID_Attribute] [int] NOT NULL,
[ID_RegDate] [int] NULL,-- дата создания
[ID_DelDate] [int] NULL -- дата удаления

)
-- ID_RegDate - ID_DelDate интервал жизни объекта

CREATE TABLE [dbo].[SectionOfTime]
(
[ID_Date] [int] NOT NULL,
[Date] [smalldatetime] NOT NULL

)
16 сен 11, 12:51    [11286945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
VitaliyG
Guest
Создал запрос, но похоже он работает неправильно . В результате он выдает почему-то больше записей (объектов ) чем есть в таблице Attribute

SELECT A.ID_Attribute, A.ID_RegDate, A.ID_DelDate, T1.Date AS RegDate, T2.Date AS DelDate
FROM Attribute AS A INNER JOIN
SectionOfTime AS T1 ON A.ID_RegDate = T1.ID_Date LEFT OUTER JOIN
SectionOfTime AS T2 ON A.ID_DelDate = T2.ID_Date
16 сен 11, 12:56    [11287005]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
2 inner join на [dbo].[SectionOfTime] по разным полям
16 сен 11, 12:56    [11287012]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
VitaliyG
Guest
Поле ID_RegDate всегда имеет ссылку на дату , а поле ID_DelDate может быть NULL. Выводить нужно все объекты , независимо от того есть ли дата удаления. Поэтому беру 2 INNER JOIN по одному полю и по второму , но уже left . что не так?
16 сен 11, 13:02    [11287060]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
darthVLAD
Member

Откуда: Київ
Сообщений: 293
не пробовали делать 2 запроса (один по ID_DelDate, а второй по ID_RegDate) и объединить их через union all ?
16 сен 11, 13:06    [11287092]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
VitaliyG
Guest
darthVLAD , была такая идея , но уж очень хочется чтобы был один запрос, интуитивно чувствую , что решение где-то рядом
16 сен 11, 13:10    [11287143]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
VitaliyG
darthVLAD , была такая идея , но уж очень хочется чтобы был один запрос, интуитивно чувствую , что решение где-то рядом

так оно уже приведено вами
Либо ваши данные невалидные, либо схема отличается от опубликованной
16 сен 11, 13:12    [11287164]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
VitaliyG
Guest
Glory, с данными вроде бы все ок . по поводу схемы не понял что Вы имеете ввиду ? единственно что могу отметить , это то , что в таблицы приведены в упрощенном виде (там есть еще поля для первой табл.), но другие поля никак не используются . Вот попробовал через объединение . Результат другой . с разницей в четыре строки .

SELECT A.ID_Attribute, A.ID_RegDate, A.ID_DelDate, T1.Date AS RegDate
FROM Attribute AS A INNER JOIN
SectionOfTime AS T1 ON A.ID_RegDate = T1.ID_Date
union ALL

SELECT A.ID_Attribute, A.ID_RegDate, A.ID_DelDate, T1.Date AS DelDate
FROM Attribute AS A INNER JOIN
SectionOfTime AS T1 ON A.ID_DelDate = T1.ID_Date

Вообще запутался . Строк порядка миллиона , посему приводить их все смысла нет . Буду пробовать на базе меньшего размера. Но ежели у кого-нибудь есть еще соображения буду признателен.
16 сен 11, 13:30    [11287362]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
VitaliyG
Guest
Glory, если Вы полагаете , что первый запрос верен , то наверное, все же что-то с данными буду пробовать с базой меньшего размера и проверенными данными.
16 сен 11, 13:34    [11287411]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
VitaliyG
Glory, с данными вроде бы все ок

Приведите тогда набор тестовых данных, для которых запрос работает неверно

VitaliyG
о поводу схемы не понял что Вы имеете ввиду ?

То, что реальная схема не соответствует описанной
16 сен 11, 13:37    [11287436]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с запросом  [new]
VitaliyG
Guest
Запрос оказался верен. Ошибка с данными. Спасибо всем за участие !!!
16 сен 11, 15:23    [11288706]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить