将数据从一个表迁移到多个表

时间:2018-05-22 12:32:35

标签: sql postgresql migration

我有shoutbox_messages个表user_idtext。 现在我添加了一些新表,chatschat_userschat_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有一个用户的多个文本。我需要改变什么来使这项工作成功?

1 个答案:

答案 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

只需确保将我的代码重写为您需要将每个列标识到另一个

所需的实际代码