簡體   English   中英

psycopg2.errors.UndefinedTable:關系不存在(連接表)

[英]psycopg2.errors.UndefinedTable: relation does not exist (join table)

我正在嘗試使用 postgreSQL 和 psycopg2 復制此答案: https://stackoverflow.com/a/33632820/1200914

我的 SQL 代碼看起來像(為了更好的可讀性,我只是把新行放在這里):

UPDATE t SET mycolumn = a.mycolumn FROM mytable AS t INNER JOIN (VALUES (28625, '1'),
                        (56614, '1'),  (86517, '1') ) AS a(id, mycolumn) ON a.id = t.id

但是,我收到下一個錯誤:

psycopg2.errors.UndefinedTable: relation "t" does not exist

使用我的 cursor 執行此 sql 時。在 mytable 中,我有一個名為 mycolumn 的列和另一個名為 id 的列,這是主鍵。 我錯過了什么? 對了,情侶的順序應該是這樣的吧? 只是問,因為在之前的回答中,我認為用戶交換了 id 和 value 值。

為了讓它工作,我將查詢重新設計為:

更新 添加WHERE子句。

UPDATE
    mytable
SET
    mycolumn = a.mycolumn::boolean
FROM
    mytable AS t
    INNER JOIN (
        VALUES (28625, '1'),
            (56614, '1'),
            (86517, '1')) AS a (id, mycolumn) ON a.id = t.id
    WHERE
        a.id = mytable.id
;

當我嘗試您的原始查詢時,我得到:

ERROR: table name "t" specified more than once

當我嘗試我的評論建議時,我得到:

ERROR: column reference "id" is ambiguous

來自此處UPDATE的文檔有些令人困惑:

別名

目標表的替代名稱。 當提供別名時,它會完全隱藏表的實際名稱。 例如,給定 UPDATE foo AS f,UPDATE 語句的其余部分必須將此表引用為 f 而不是 foo。

來自_item

允許其他表中的列出現在 WHERE 條件和更新表達式中的表表達式。 這使用與 SELECT 語句的 FROM 子句相同的語法; 例如,可以指定表名的別名。 不要將目標表作為 from_item 重復,除非您打算進行自連接(在這種情況下,它必須以別名出現在 from_item 中)。

但是鑒於錯誤消息,我認為UPDATE部分需要實際的表名,而FROM需要別名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM