临时表的创建、使用与复杂查询拆分
通过 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)
通过临时表将复杂子查询的结果物化,后续可以多次引用该结果集,既提升了可读性,也避免了重复执行相同的复杂查询逻辑。
Previous: GROUP BY 分组后使用子查询
Next: timestamp