【问题标题】:Fix the integrity error while using Python with sql?修复使用 Python 和 sql 时的完整性错误?
【发布时间】:2019-10-26 22:39:38
【问题描述】:

Integrity Error Screenshot

我正在尝试在 Employee_id 上加入 Employee 和 Employee Task 两个表,但出现完整性错误。我能够在 Department_id 上加入 Employee 和 Department。

员工:

  • Employee_fname,
  • Employee_lname,
  • Employee_title,
  • 部门 ID,
  • Employee_id

员工任务:

  • Project_id_no,
  • Employee_id,
  • Employee_task_in_project

部门:

  • 部门 ID,
  • 部门名称,
  • 部门位置,
  • Department_phone_ext

我正在使用以下语句加入。有什么问题?

sql = f"SELECT Employee_id, Employee_fname, Employee_lname, Employee_title,Employee_task_in_project FROM Employee FULL JOIN EmployeeTask ON Employee.Employee_id = EmployeeTask.Employee_id WHERE Employee.Employee_id = \'{str(employeeno)}\'"

【问题讨论】:

    标签: sql sql-server python-3.x


    【解决方案1】:

    这是您的查询:

    SELECT Employee_id, Employee_fname, Employee_lname, Employee_title,Employee_task_in_project
    FROM Employee FULL JOIN
         EmployeeTask
         ON Employee.Employee_id = EmployeeTask.Employee_id
    WHERE Employee.Employee_id = ?
    

    至少有一个问题是Employee_id 在两个表中,但SELECT 中的引用没有指定哪一个。这会产生不明确的引用错误。

    我建议将查询编写为:

    SELECT e.Employee_id, e.Employee_fname, e.Employee_lname, 
           e.Employee_title, et.Employee_task_in_project
    FROM Employee e LEFT JOIN
         EmployeeTask et
         ON e.Employee_id = et.Employee_id
    WHERE e.Employee_id = ?;
    

    注意事项:

    • 质量所有列引用,因此您、其他人和编译器都清楚它们来自哪个表。
    • 表别名使查询更易于编写和阅读。
    • FULL JOIN 几乎没有必要。在这种情况下,LEFT JOIN 似乎是正确的 - 它保留了所有员工,即使是那些没有任务的员工。
    • 学习使用参数而不是修改查询字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2013-07-12
      • 2019-11-02
      相关资源
      最近更新 更多