修复使用 Python 和 sql 时的完整性错误?
Posted
技术标签:
【中文标题】修复使用 Python 和 sql 时的完整性错误?【英文标题】:Fix the integrity error while using Python with 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)\'"
【问题讨论】:
【参考方案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
似乎是正确的 - 它保留了所有员工,即使是那些没有任务的员工。
学习使用参数而不是修改查询字符串。
【讨论】:
以上是关于修复使用 Python 和 sql 时的完整性错误?的主要内容,如果未能解决你的问题,请参考以下文章