在邮件系统中,我想录制新邮件。 由于技术原因我的系统中有两个表。一个引用会话,另一个引用链接到这些会话的消息。
conversation
conversation_id
---------------
3
4
8
12
(*)conversation_id是一个序列号。
message
message_id | conversation_id | timestamp | sender_id | receiver_id | message
------------+-----------------+---------------------+-----------+-------------+-------------------------------
12 | 3 | 2015-05-13 15:46:36 | 1 | 2 | Hello Bob! How are you doing?
13 | 3 | 2015-05-13 15:55:10 | 2 | 1 | I'm fine, and you?
当系统记录新消息时,如果尚未完成,我希望它自动创建相应的对话。 我希望该声明能够返回完整的对话(意味着所有与刚刚添加的消息相关联的消息)。
因此,如果尚未创建对话,系统将插入对话,然后插入消息并最终返回整个对话。
所以我只想将这个元组提供给postGreSQL (timestamp,sender_id,receiver_id,message),让它处理对话部分(创建或选择)。
我想恢复完整的对话,就像我做的那样:
SELECT * FROM message WHERE conversation_id="xxxx"
是否可以在一个SQL语句中执行所有这些操作?
我发现我们可以使用与INSERT和SELECT操作相关联的CTE,但我不知道如何表达我的具体要求。