Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 博士后为何获胜';t正确映射列_Sql_Postgresql_Django Models - Fatal编程技术网

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使用默认列顺序,而您没有指定所需的列顺序