如何解决如何使用WITH子查询更新或插入数据?并避免`PG :: UndefinedTable:错误:缺少表的FROM子句条目错误
我正在尝试运行简单的SQL查询:
<<-SQL.squish
WITH payloads as (
INSERT into text_payloads (text,created_at,updated_at)
SELECT text,updated_at
FROM text_messages
RETURNING id,text,updated_at
)
UPDATE text_messages
SET
payload_id = text_payloads.id,payload_type = 'TextPayload'
WHERE
text_messages.text = text_payloads.text AND
text_messages.created_at = text_payloads.created_at AND
text_messages.updated_at = text_payloads.updated_at
SQL
但出现此错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "text_payloads"
LINE 1: ...d_type = 'TextPayload' WHERE text_messages.text = text_paylo...
我已经尝试添加FROM payloads
甚至是LEFT OUTER JOIN text_payloads
,但没有任何帮助。如何使用WITH
子查询及其结果来实现此更新或类似的插入操作?
非常感谢您!
解决方法
错误消息很明显:FROM
语句中没有UPDATE
子句可以在CTE之间执行联接(我想您想使用CTE而不是
text_payloads
和text_messages
。
正确的语法是:
WITH payloads as (
INSERT into text_payloads (text,created_at,updated_at)
SELECT text,updated_at
FROM text_messages
RETURNING id,text,updated_at
)
UPDATE text_messages
SET
payload_id = payloads.id,payload_type = 'TextPayload'
FROM payloads
WHERE
text_messages.text = payloads.text AND
text_messages.created_at = payloads.created_at AND
text_messages.updated_at = payloads.updated_at
请参见demo。
这是工作代码
<<-SQL.squish
WITH payloads as (
INSERT into text_payloads (text,updated_at)
SELECT text,updated_at
FROM text_messages
RETURNING id,updated_at
)
UPDATE text_messages
SET
payload_id = text_payloads.id,payload_type = 'TextPayload'
FROM payloads,text_payloads
WHERE
text_messages.text = text_payloads.text AND
text_messages.created_at = text_payloads.created_at AND
text_messages.updated_at = text_payloads.updated_at
SQL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。