我有以下查询。这里的“ B”给了我非重复的MessageId,我在A的子查询中使用它们,B在内部使用A。
因此,当我在最后一部分中调用SELECT时,它将再次执行A还是使用在调用B时已经获取的数据?
WITH A as (
SELECT z.Name,ze.Inside,ze.MessageId,ze.DateTime
FROM ZonestateEntries ze
INNER JOIN Zone z
ON ze.ZoneId = z.ZoneId
WHERE ze.ObjectId = 1324
AND (Inside = 1 OR Inside = 0)
AND ze.DateTime BETWEEN '2018-10-22 00:00:00' AND '2019-11-05 00:00:00'
),B as (
SELECT a.MessageId
FROM A a
INNER JOIN A b
on a.MessageId = b.MessageId
GROUP BY a.MessageId
HAVING COUNT(a.MessageId) = 1
)
SELECT *
FROM A
WHERE MessageId IN (
SELECT *
FROM B
)
AND a.Inside = 1
ORDER BY DateTime DESC
这里的数据非常庞大,我们无法多次执行查询A。我们可以进一步优化它吗?