SQL 搜索同一部门其他人的员工
SQL Employees Searching for Others in Same Department
我有一个业务规则,员工不能向同一部门的员工购买物品。我有两个 table。一个是员工及其 ID 列表:
Emp_ID Emp_Name Dept_ID
1 John 1
2 Bob 1
3 Susie 2
4 Jack 3
5 Jill 3
还有一个 table 的员工 ID 和他们购买的员工 ID:
Emp_ID Bought_From_Emp_ID
1 2
2 3
4 5
5 1
如果一个员工从同一个部门购买了一件商品,我的预期输出将是两个员工的员工 ID(或姓名):
Emp_ID Bought_From_Emp_ID Same_Dept_ID
1 2 1 --John and Bob are in Same Department (1)
4 5 3 --Jack and Jill are in Same Department (3)
我将如何为数百万条记录执行此操作?感觉这个长的很简单运行,但是我的思路还没有转向解决方案
我正在使用 Teradata,但如果有任何 SQL 特定的答案,我可以使用 MSSQL
DECLARE @emp TABLE
(
emp_id INT,
emp_name VARCHAR(20),
dept_id INT
);
INSERT INTO @emp
(
emp_id,
emp_name,
dept_id
)
VALUES
--Emp_ID Emp_Name Dept_ID
(1, 'John ', 1),
(2, 'Bob', 1),
(3, 'Susie', 2),
(4, 'Jack', 3),
(5, 'Jill', 3);
DECLARE @purch TABLE
(
emp_id INT,
Bought_From_Emp_ID INT
);
INSERT INTO @purch
(
emp_id,
Bought_From_Emp_ID
)
VALUES
(1, 2),
(2, 3),
(4, 5),
(5, 1);
SELECT e.emp_id,
e1.emp_id AS Bought_From_Emp_ID,
e.dept_id AS Same_Dept_ID
FROM @purch p
JOIN @emp e
ON p.emp_id = e.emp_id
JOIN @emp e1
ON p.Bought_From_Emp_ID = e1.emp_id
AND e.dept_id = e1.dept_id
WHERE e1.emp_id <> e.emp_id;
试试这个查询
SELECT purch.emp_id AS EmpID,
purch.bought_from_emp_id AS BoughtFrom,
T1.dept_id AS department
FROM purch
INNER JOIN emp T1
ON T1.emp_id = purch.emp_id
INNER JOIN emp T2
ON T2.emp_id = purch.bought_from_emp_id
WHERE t1.dept_id = t2.dept_id
输出
+-------+------------+------------+
| EmpID | BoughtFrom | department |
+-------+------------+------------+
| 1 | 2 | 1 |
| 4 | 5 | 3 |
+-------+------------+------------+
我有一个业务规则,员工不能向同一部门的员工购买物品。我有两个 table。一个是员工及其 ID 列表:
Emp_ID Emp_Name Dept_ID
1 John 1
2 Bob 1
3 Susie 2
4 Jack 3
5 Jill 3
还有一个 table 的员工 ID 和他们购买的员工 ID:
Emp_ID Bought_From_Emp_ID
1 2
2 3
4 5
5 1
如果一个员工从同一个部门购买了一件商品,我的预期输出将是两个员工的员工 ID(或姓名):
Emp_ID Bought_From_Emp_ID Same_Dept_ID
1 2 1 --John and Bob are in Same Department (1)
4 5 3 --Jack and Jill are in Same Department (3)
我将如何为数百万条记录执行此操作?感觉这个长的很简单运行,但是我的思路还没有转向解决方案
我正在使用 Teradata,但如果有任何 SQL 特定的答案,我可以使用 MSSQL
DECLARE @emp TABLE
(
emp_id INT,
emp_name VARCHAR(20),
dept_id INT
);
INSERT INTO @emp
(
emp_id,
emp_name,
dept_id
)
VALUES
--Emp_ID Emp_Name Dept_ID
(1, 'John ', 1),
(2, 'Bob', 1),
(3, 'Susie', 2),
(4, 'Jack', 3),
(5, 'Jill', 3);
DECLARE @purch TABLE
(
emp_id INT,
Bought_From_Emp_ID INT
);
INSERT INTO @purch
(
emp_id,
Bought_From_Emp_ID
)
VALUES
(1, 2),
(2, 3),
(4, 5),
(5, 1);
SELECT e.emp_id,
e1.emp_id AS Bought_From_Emp_ID,
e.dept_id AS Same_Dept_ID
FROM @purch p
JOIN @emp e
ON p.emp_id = e.emp_id
JOIN @emp e1
ON p.Bought_From_Emp_ID = e1.emp_id
AND e.dept_id = e1.dept_id
WHERE e1.emp_id <> e.emp_id;
试试这个查询
SELECT purch.emp_id AS EmpID,
purch.bought_from_emp_id AS BoughtFrom,
T1.dept_id AS department
FROM purch
INNER JOIN emp T1
ON T1.emp_id = purch.emp_id
INNER JOIN emp T2
ON T2.emp_id = purch.bought_from_emp_id
WHERE t1.dept_id = t2.dept_id
输出
+-------+------------+------------+
| EmpID | BoughtFrom | department |
+-------+------------+------------+
| 1 | 2 | 1 |
| 4 | 5 | 3 |
+-------+------------+------------+