#sql #postgresql #django-models
#sql #postgresql #django-модели
Вопрос:
У меня есть этот запрос для обновления другой таблицы, но появляется ошибка.
With CTE AS
(Select employer_id, employee_id, start_date, end_date, hourly_rate, end_date - start_date AS time_worked
FROM payroll_timesheet)
INSERT INTO payroll_timelog
SELECT * FROM CTE
WHERE employee_id = 1;
Я получаю эту ошибку:
ERROR: column "employee_id" is of type integer but expression is of type timestamp with time zone
LINE 5: SELECT employer_id, employee_id, start_date, end_date, hourl...
^
HINT: You will need to rewrite or cast the expression.
Похоже, это сопоставление employee_id
с start_date
.
Или в запросе есть синтаксическая ошибка?
Ответ №1:
Ваша текущая ошибка является отличной причиной того, почему вы всегда должны явно указывать имена столбцов целевой таблицы во вставке. Вы должны были использовать что-то вроде этого:
WITH cte AS (
SELECT employer_id, employee_id, start_date, end_date, hourly_rate,
end_date - start_date AS time_worked
FROM payroll_timesheet
)
INSERT INTO payroll_timelog (employer_id, employee_id, start_date, end_date, hourly_rate,
time_worked)
SELECT employer_id, employee_id, start_date, end_date, hourly_rate, time_worked
FROM cte
WHERE employee_id = 1;
Возможно, вам придется изменить имена столбцов целевой payroll_timelog
таблицы, чтобы они соответствовали. Ваша текущая ошибка возникает из-за того, что Postgres использует порядок столбцов по умолчанию, в отсутствие указания вами нужного порядка столбцов.