SQL Common Table Expressions(CTE)是一种临时结果集,可以在查询中引用多次。CTE 提供了一种更清晰的方式来组织复杂的 SQL 查询,使其更易于理解和维护。CTE 可以用于递归查询、简化子查询和提高查询性能。
假设有一个表 employees
,包含员工的 ID 和他们的直接上级 ID:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
如果我们想查询所有员工及其直接上级,可能会写出如下查询:
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.id;
这个查询可能会导致重复结果,特别是当某个员工有多个下属时。
为了避免重复结果,可以使用 CTE:
WITH employee_manager AS (
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.id
)
SELECT DISTINCT employee, manager
FROM employee_manager;
在这个例子中,我们使用 WITH
子句定义了一个 CTE employee_manager
,然后在主查询中使用 DISTINCT
关键字来避免重复结果。
-- 创建示例表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
-- 插入示例数据
INSERT INTO employees (id, name, manager_id) VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Charlie', 1),
(4, 'David', 2),
(5, 'Eve', 2);
-- 使用 CTE 避免重复结果
WITH employee_manager AS (
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.id
)
SELECT DISTINCT employee, manager
FROM employee_manager;
通过使用 CTE,可以有效地避免重复结果,提高查询的可读性和性能。
领取专属 10元无门槛券
手把手带您无忧上云