sql - 一个查询中的多个 SELECT 使用相同的 WITH
问题描述
此查询过滤主表中的一些 ID,并将来自其他两个表的 ID 作为两个记录集返回所有数据 abpout:
WITH filteredIds (fid) AS
(
SELECT id
FROM MasterTable
WHERE <somecondition>
)
SELECT *
FROM Table1
RIGHT JOIN filteredIds ON (Table1.id = filteredIds.fid);
WITH filteredIds (fid) AS
(
SELECT id
FROM MasterTable
WHERE <somecondition>
)
SELECT *
FROM Table2
RIGHT JOIN filteredIds ON (Table2.id = filteredIds.fid);
到目前为止,这是可行的,但最好只有一个 WITH 子句,因为条件总是相同的。此外,条件通常是手动编写的,因为它用于收集一些诊断数据。
但是这个
WITH filteredIds (fid) AS
(
SELECT id
FROM MasterTable
WHERE <somecondition>
)
SELECT *
FROM Table1
RIGHT JOIN filteredIds ON (Table1.id = filteredIds.fid);
SELECT *
FROM Table2
RIGHT JOIN filteredIds ON (Table2.id = filteredIds.fid);
不起作用,SQL Server 声称它不知道filteredIds
最后一个查询中的对象。
我是否监督了某些事情,或者它不是那样工作的?我想替代方案将是一个临时表。
解决方案
一旦在查询中使用了 CTE,就不能在另一个查询中重用它。据我所知,没有直接的解决方法。最接近您想要的可能是创建一个真正的临时表:
CREATE TABLE #temp (fid int);
INSERT INTO #temp (fid)
SELECT id FROM MasterTable WHERE <somecondition>;
然后,您可以直接重用临时表:
SELECT * FROM Table1 a RIGHT JOIN #temp b ON a.id = b.fid;
SELECT * FROM Table2 a RIGHT JOIN #temp b ON a.id = b.fid;
推荐阅读
- python - Panda 数据帧中平均连续 2 行
- python - python Flask jinja2 模板化嵌套的 mongodb 数据游标对象
- c++ - 如何将对象传递给 std::accumulate 函数?
- tensorflow - 如果存在 [10,1] 张量,如何获得具有相等值及其下标的那些行?
- sql - 在 SQL 中使用大小写的不同数据类型
- lagom - 如何将 Lagom 中的微服务绑定到 localhost 以外的其他内容?
- jquery - $().html() 是追加而不是覆盖
- javascript - Fetch - SyntaxError: Unexpected token < in JSON at position 0
- python-3.x - 如何将网络抓取的数据放入一个数据框中?
- javascript - 将 python 函数转换为 Javascript/node.js