2011-02-10 2 views
0

Я лично чувствую, что я даю одинаковые условия для обоих запросов, почему они создают разные результаты. Хотя я думаю, что они должны давать одинаковые результаты. Я просто не понимаю эту аберрантную природу. Пожалуйста, объясните мне это.В чем разница между двумя запросами

SELECT 
    MIN(EventID) 
FROM 
    [3rdi_Events] 
WHERE 
    EventID IN (
     SELECT DISTINCT 
      EventId 
     FROM 
      [3rdi_EventDates] 
     WHERE 
      EventDate Between '2/9/2011' AND '3/11/2012' 
      ) 
GROUP BY 
    EventTypeId 

и

SELECT 
    EventId 
FROM 
    [3rdi_Events] AS E 
WHERE 
    E.EventID IN (
     SELECT 
      min(EventId) 
     FROM 
      [3rdi_Events] 
     GROUP BY 
      EventTypeId 
    ) 
    AND 
    E.EventID IN (
     SELECT DISTINCT 
      EventId 
     FROM 
      [3rdi_EventDates] 
     WHERE 
      EventDate Between'2/9/2011' AND '3/11/2012' 
    ) 

ответ

0

Рассматривают это:

EventId   Date  EventType 
1    1/1/11 1 
2    3/3/11 1 

Первый запрос включает в себя события дата которых находится в пределах 2/9/11 и 3/11/12, что это событие не , 2.

Второй запрос включает только события с min EventId для заданного типа (№ 1) (первый подзабор) и дата которого находится между 2/9/11 и 3/11/12 (второй подзабор). Ни одна строка не соответствует этой комбинации.

0

Во втором запросе в части:

WHERE 
E.EventID IN (
    SELECT 
     min(EventId) 
    FROM 
     [3rdi_Events] 
    GROUP BY 
     EventTypeId 
) 

вы не имеете условие EVENTDATE, поэтому поиск минимального элемента из таблицы, а также с другой стороны:

AND 
E.EventID IN (
    SELECT DISTINCT 
     EventId 
    FROM 
     [3rdi_EventDates] 
    WHERE 
     EventDate Between'2/9/2011' AND '3/11/2012' 
) 

, чтобы быть в этом диапазоне дат. Поэтому, если минимум не в этом диапазоне, он не отображает его. Тем не менее, первый запрос возвращает минимальный элемент из этого диапазона дат

0

В первом запросе вы выбираете минимальный EventId Thats даты попадают в '2/9/2011' и '3/11/2012'

Во втором запросе вы выбираете EventId где EventID является Minumum в таблице и где даты приходятся между '2/9/2011' и '3/11/2012'

Если во втором запросе, если в таблице минимальный EventId не падает в эти даты никакая стоимость не должна возвращаться.

думаю.

Смежные вопросы