[英]"psycopg2.errors.UndefinedTable: relation "flights" does not exist"
[英]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.