临时表的创建、使用与复杂查询拆分

临时表的创建、使用与复杂查询拆分

通过 SELECT INTO 创建临时表

SELECT * INTO #temp1 FROM person

SELECT * FROM Product p
JOIN #temp1 t ON p.personid = t.idCode language: PHP (php)

临时表可以使用 SELECT INTO 的方式创建,也可以直接 CREATE TABLE 的方式创建:

CREATE TABLE #temd
(
    id int
)Code language: CSS (css)

临时表可以反复使用,可以多次创建多张临时表。有些时候如果查询复杂,可以把中间结果临时存放在一张临时表上,然后把这个结果当成一张表来继续使用。

将分组子查询结果存入临时表

SELECT name,
       (SELECT TOP 1 age FROM person p WHERE p.name = per.name AND p.id != per.id) AS age
INTO #temp
FROM person per
GROUP BY per.name, per.id

SELECT * FROM #tempCode language: PHP (php)

利用临时表简化后续查询

-- 有临时表的操作
SELECT * FROM person
WHERE age IN
(
    SELECT age FROM #temp
)Code language: CSS (css)
-- 如果没有临时表,需要把整个子查询内联写回
SELECT * FROM person
WHERE age IN
(
    SELECT (SELECT TOP 1 age FROM person p WHERE p.name = per.name AND p.id != per.id) AS age
    FROM person per
    GROUP BY per.name, per.id
)Code language: PHP (php)

通过临时表将复杂子查询的结果物化,后续可以多次引用该结果集,既提升了可读性,也避免了重复执行相同的复杂查询逻辑。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注