我有shoutbox_messages
个表user_id
和text
。
现在我添加了一些新表,chats
,chat_users
和chat_messages
。
现在我想将chat_messages
中的数据插入到新结构中。我在chat
中创建了一个条目,需要chat_users
INSERT INTO chat_users (user_id, chat_id)
SELECT DISTINCT shoutbox_messages.user_id,
(SELECT chats.id FROM chats WHERE chats.shoutbox = true)
FROM shoutbox_messages"
到目前为止一切顺利。现在,我想将shoutbox_messages
的所有邮件添加到chat_messages
INSERT INTO chat_messages (chat_user_id, text, text_as_html)
SELECT chat_users.id,
(Select shoutbox_messages.text, shoutbox_messages.text_as_html
FROM shoutbox_messages Where shoutbox_messages.user_id =
(SELECT DISTINCT chat_users.id
WHERE chat_users.user_id = shoutbox_messages.user_id
)
)
from chat_users
这不起作用,因为shoutbox_messages
有一个用户的多个文本。我需要改变什么来使这项工作成功?
答案 0 :(得分:1)
您遇到的问题是您尝试将多个列插入一列。以及不将数据插入第三列,这可能不是你想要做的。
如此处所示:(Select shoutbox_messages.text, shoutbox_messages.text_as_html
FROM shoutbox_messages Where shoutbox_messages.user_id = ...
因为您只是将数据插入文本,此查询无效。
pgsql将第二个查询解释为仅text
列
您可能希望不使用当前的语法,而是使用sql join语法,因为它会完成同样的事情
的内容
SELECT chat_users.id, shoutbox_messages.text, shoutbox_messages.text_as_html
FROM chat_users
join shoutbox_messages on shoutbox_messages.id = chat_users.id
只需确保将我的代码重写为您需要将每个列标识到另一个
所需的实际代码