powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / EXISTS или IN -ошибка в логике (ms sql 2005)
5 сообщений из 5, страница 1 из 1
EXISTS или IN -ошибка в логике (ms sql 2005)
    #37884946
trew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
DECLARE @date  smalldatetime
DECLARE @beg_date  smalldatetime
DECLARE @end_date  smalldatetime

SELECT @beg_date ='20120701',  @end_date ='20120730'     
        
    DECLARE @tab_date TABLE (date smalldatetime UNIQUE)
    SET @date = dateadd(day,datediff(day,(0),@beg_date),(0)) 
    WHILE @date <= @end_date
    BEGIN
        INSERT INTO @tab_date VALUES (@date)
        SET @date = DATEADD(day, 1, @date)
    END
    
-- в таблице tab2 два поля даты   
    
-- Запрос 1  -- возвращает 12650 записей
SELECT q.date2,q.date3    
FROM dbo.tab2 q
        INNER JOIN @tab_date dt
        ON dt.date IN ( 
            dateadd(day,datediff(day,(0),q.date2),(0)) ,
            dateadd(day,datediff(day,(0),q.date3),(0))    
            )

-- Запрос 2  -- возвращает 9078
SELECT q.date2,q.date3    
FROM dbo.tab2 q       
WHERE EXISTS(SELECT 1 FROM @tab_date WHERE date = dateadd(day,datediff(day,(0),q.date2),(0))
OR date = dateadd(day,datediff(day,(0),q.date3),(0)))



Почему результат Запроса 1 отличается от Запроса 2. Просьба объяснить ошибку в логике.
Как можно оптимизировать запрос 1?
...
Рейтинг: 0 / 0
EXISTS или IN -ошибка в логике (ms sql 2005)
    #37884969
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так понятней?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @tab2 table (id int unique, date2 datetime, date3 datetime)
insert into @tab2 values (1, '20120702', '20120703')

SELECT q.id, q.date2,q.date3, dt.date
FROM @tab2 q
         INNER JOIN @tab_date dt
         ON dt.date IN (
             dateadd(day,datediff(day,(0),q.date2),(0)) ,
             dateadd(day,datediff(day,(0),q.date3),(0))
             )


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EXISTS или IN -ошибка в логике (ms sql 2005)
    #37884974
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trew,
представьте, что @tab_date.date подходит в оба элемента IN(). сколько строк выдаст inner join для исходной строки из tab2?
...
Рейтинг: 0 / 0
EXISTS или IN -ошибка в логике (ms sql 2005)
    #37884993
trew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, помогли разобраться!
...
Рейтинг: 0 / 0
EXISTS или IN -ошибка в логике (ms sql 2005)
    #37885017
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakilltrew,
представьте, что @tab_date.date подходит в оба элемента IN(). сколько строк выдаст inner join для исходной строки из tab2?

ошибка, исправляюсь. если несколько разных @tab_date.date подходят в IN() для одной и той же строки tab2
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / EXISTS или IN -ошибка в логике (ms sql 2005)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]