【问题标题】:SQL Employees Searching for Others in Same DepartmentSQL 员工在同一部门搜索其他人
【发布时间】:2018-10-11 12:36:59
【问题描述】:

我有一条业务规则,员工不能从同一部门的员工那里购买商品。我有两张桌子。一个是员工列表和他们的 ID:

   Emp_ID Emp_Name  Dept_ID
       1     John        1
       2      Bob        1
       3    Susie        2
       4     Jack        3
       5     Jill        3

还有一张员工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

【问题讨论】:

标签: sql sql-server teradata


【解决方案1】:
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;

【讨论】:

  • 我喜欢这种简单!为了我自己的理解,让我尝试对它进行逆向工程。
  • 感谢分享表格。
【解决方案2】:

试试这个查询

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 |
+-------+------------+------------+

演示:http://www.sqlfiddle.com/#!18/22746/1/0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多