我个人觉得我对两个查询给出了相同的条件,那么为什么它们会产生不同的结果。虽然我认为他们应该产生相同的结果。我只是不明白这种异常的本性。请解释一下。
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 :(得分: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}}不在这些日期内,则不应返回任何值。
我想。