【问题标题】:Why postgres won't map columns correctly为什么 postgres 不能正确映射列
【发布时间】:2020-10-14 02:40:47
【问题描述】:

我有这个查询要更新另一个表,但出现错误。

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

或者查询中有语法错误?

【问题讨论】:

    标签: sql postgresql django-models


    【解决方案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 使用的是默认列顺序,而您没有指定所需的列顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2013-06-15
      • 2014-10-10
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2017-03-07
      相关资源
      最近更新 更多