Исправить ошибку целостности при использовании Python с sql? - PullRequest
0 голосов
/ 27 октября 2019

Снимок экрана с ошибкой целостности

Я пытаюсь объединить 2 таблицы, Employee и Employee Task с Employee_id, но получаю сообщение об ошибке Integrity. Я смог присоединиться к сотруднику и отделу по Department_id.

Сотрудник:

  • Имя сотрудника,
  • Имя сотрудника,
  • Название сотрудника,
  • Department_id,
  • Employee_id

EmployeeTask:

  • Project_id_no,
  • Employee_id,
  • Employee_task_in_project

Отдел:

  • Идентификатор отдела,
  • Имя отдела,
  • Расположение отдела,
  • Отдел_телефон_экст

Я использую следующее заявление, чтобы присоединиться. В чем проблема?

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 Ответ

0 голосов
/ 27 октября 2019

Это ваш запрос:

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 кажется правильным - он сохраняет всех сотрудников, даже тех, у кого нет задач.
  • Научитесь использовать параметры вместо того, чтобы манипулировать строками запроса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...