两个查询之间有什么区别

时间:2011-02-10 11:00:17

标签: sql

我个人觉得我对两个查询给出了相同的条件,那么为什么它们会产生不同的结果。虽然我认为他们应该产生相同的结果。我只是不明白这种异常的本性。请解释一下。

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'
    )

3 个答案:

答案 0 :(得分:0)

考虑一下:

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

第一个查询包括日期在2/9/11和3/11/12之间的事件,即事件编号。 2。

第二个查询仅包括具有给定类型(第1个)(第一个子选择)的最小EventId的事件,其日期在2/9/11和3/11/12之间(第二个子选择)。没有行匹配此组合。

答案 1 :(得分: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'
)

在该日期范围内。因此,如果最小值不在该范围内,则不会显示它。但是,第一个查询返回该日期范围内的最小元素

答案 2 :(得分:0)

在第一个查询中,您选择的日期最小EventId日期属于'2/9/2011''3/11/2012'

在第二个查询中,您选择EventId EventID,其中'2/9/2011'是表格中的最小值,其中日期介于'3/11/2012'之间和EventId

如果在第二个查询中,如果表中的最小{{1}}不在这些日期内,则不应返回任何值。

我想。