Sql 博士后为何获胜';t正确映射列
我有此查询要更新另一个表,但出现错误Sql 博士后为何获胜';t正确映射列,sql,postgresql,django-models,Sql,Postgresql,Django Models,我有此查询要更新另一个表,但出现错误 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:
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.
它似乎将员工id
映射为开始日期
或者查询中是否存在语法错误?您当前的错误是一个很好的理由,可以解释为什么您应该始终在insert中显式列出目标表的列名。您应该使用类似以下内容:
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\u timelog
表的列名以匹配。发生当前错误是因为Postgres使用默认列顺序,而您没有指定所需的列顺序。您当前的错误是一个很好的理由,可以解释为什么您应该始终在insert中显式列出目标表的列名。您应该使用类似以下内容:
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\u timelog
表的列名以匹配。发生当前错误是因为Postgres使用默认列顺序,而您没有指定所需的列顺序