【问题标题】:SQL for a many to many relationship using inner joins使用内部连接的多对多关系的 SQL
【发布时间】:2013-05-11 21:15:35
【问题描述】:

我在员工和工作组之间存在以下多对多关系:

员工表 ----------------- ID 员工组表 --------------- 员工ID 工作组 ID 工单表 ---------------- 工作组 ID

我正在尝试编写 SQL 来根据员工所属的工作组列出该员工的所有工作订单。

这是我的尝试:

SELECT wonum, workgroup_id
FROM workorders
INNER JOIN employees
ON workorders.employee_id = employee_id
INNER JOIN empgroups 
ON employees.employee.id = empgroups.employee_id
WHERE employee_id = 2

我得到的错误是:

ERROR:  schema "employees" does not exist

抱歉 - 员工的 id 不是employee.id

【问题讨论】:

  • 有什么问题?您从 SELECT 获得的结果有什么问题?
  • 需要在where子句中消除employee_id的歧义吗?

标签: sql postgresql


【解决方案1】:

尝试改用此查询:

SELECT * FROM empgroups
INNER JOIN employees
ON empgroups.empId = employees.id
INNER JOIN workorders
ON empgroups.woId = workorders.id

SqlFiddle

【讨论】:

    【解决方案2】:

    这不是你要找的吗?

    SELECT wonum, workgroup_id
      FROM workorders
      JOIN empgroups 
        ON empgroups.workgroup_id = workorders.workgroup_id
      JOIN employees
        ON employees.employee_id = empgroups.employee_id
     WHERE employees.employee_id = 2
    

    【讨论】:

    • 我真的很想知道整个查询中的表和元素到底发生了什么
    【解决方案3】:
    SELECT w.wonum, w.workgroup_id
    FROM   workorders w
    JOIN   empgroups  e USING (workgroup_id)
    WHERE  e.employee_id = 2
    

    此查询根本不需要表employeesUSING 在这种情况下缩短了语法。和表别名一样。

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多