使用 WITH 存储子查询以便在 IN 语句中重复使用

Store subquery with WITH for re-use in IN statements

我想存储子查询中的值列表,以便在 IN 语句中跨我的​​查询重复使用:

WITH ListOfIds AS (SELECT Id FROM Users)
(SELECT COUNT(*) FROM Foo WHERE Foo.UserId IN ListOfIds)
UNION
(SELECT COUNT(*) FROM Bar WHERE Bar.UserId IN ListOfIds)

无效。我该怎么做?

您可以使用:

WITH ListOfIds AS (SELECT Id FROM Users)
SELECT COUNT(*) 
FROM Foo 
WHERE Foo.UserId IN (SELECT Id FROM ListOfIds)
UNION
SELECT COUNT(*) 
FROM Bar 
WHERE Bar.UserId IN (SELECT Id FROM ListOfIds)

虽然有点无意义。

可能 UNION ALL 而不是 UNION。我没有看到跳过计数的意义。


你应该留在:

SELECT COUNT(*) 
FROM Foo 
WHERE Foo.UserId IN (SELECT Id FROM Users)
UNION
SELECT COUNT(*) 
FROM Bar 
WHERE Bar.UserId IN (SELECT Id FROM Users)

我想查询优化器足够聪明,可以一次获得 Id 的列表。