我有一个表"queued_items".当前"user_id"和"item_id"不正确,但存储在其他表中:users.imported_id和items.imported_id
尝试从其他表中获取imported_id并进行更新.这是我尝试过的
UPDATE queued_items
SET queued_items.user_id = users.id,
queued_items.item_id = items.id
FROM queued_items
INNER JOIN users ON queued_items.user_id = users.imported_id
INNER JOIN items ON queued_items.item_id = items.imported_id
Run Code Online (Sandbox Code Playgroud)
得到此错误:
Error : ERROR: table name "queued_items" specified more than once
Run Code Online (Sandbox Code Playgroud)
尝试删除FROM行,出现此错误:
Error : ERROR: syntax error at or near "INNER"
LINE 4: INNER JOIN users ON queued_items.user_id = users.imported_id
^
Run Code Online (Sandbox Code Playgroud)
我还尝试在FROM和JOIN条件中添加别名
UPDATE queued_items
SET queued_items.user_id = users.id,
queued_items.item_id = items.id
FROM queued_items as qi
INNER JOIN users ON qi.user_id = users.imported_id
INNER JOIN items ON qi.item_id = items.imported_id
Run Code Online (Sandbox Code Playgroud)
得到此错误:
Error : ERROR: column "queued_items" of relation "queued_items" does not exist
LINE 2: SET queued_items.user_id = users.id,
^
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?(postgres 9)
PS试图避免这个子查询:
UPDATE queued_items
SET user_id = (SELECT id FROM users WHERE queued_items.user_id = users.imported_id),
item_id = (SELECT id FROM items WHERE queued_items.item_id = items.imported_id)
Run Code Online (Sandbox Code Playgroud)
......因为它很疯狂
mu *_*ort 13
试试这个:
UPDATE queued_items
SET user_id = users.id,
item_id = items.id
FROM users, items
WHERE queued_items.user_id = users.imported_id
AND queued_items.item_id = items.imported_id
Run Code Online (Sandbox Code Playgroud)
是的,老学校加入条件.
UPDATE [ ONLY ] table [ [ AS ] alias ]
SET { column = { expression | DEFAULT } |
( column [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...]
[ FROM from_list ]
[ WHERE condition | WHERE CURRENT OF cursor_name ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
Run Code Online (Sandbox Code Playgroud)
*from_list*
表表达式列表,允许其他表中的列出现在WHERE条件和更新表达式中.这类似于可以在SELECT语句的FROM子句中指定的表列表.请注意,目标表不得出现在from_list中,除非您打算进行自联接(在这种情况下,它必须在from_list中显示别名).
小智 5
UPDATE queued_items
SET user_id = users.id,
item_id = items.id
FROM queued_items as QI
INNER JOIN users ON QI.user_id = users.imported_id
INNER JOIN items ON QI.item_id = items.imported_id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30771 次 |
| 最近记录: |