sql - 带有条件的多个 INSERT 和 SELECT 在一个请求中返回

标签 sql postgresql

在消息系统中,我想录制一条新消息。 由于技术原因,我的系统中有两个表。一个引用对话,另一个引用链接到这些对话的消息。

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,但我不知道如何表达我的具体要求。

最佳答案

您可以创建一个 PL/pgSQL接受您的元组作为参数的存储过程,检查您的表并执行任何必要的插入操作。或者,您可以使用 rules 来完成一些更巧妙的事情。或 triggers ,甚至 CTE,但我不够圆滑,无法轻松描述如何实现。

关于sql - 带有条件的多个 INSERT 和 SELECT 在一个请求中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30264336/

相关文章:

SQL Server 性别互换查询

sql - Access - 比较两个表并在第一个表中更新或插入数据

php - PDO postgres 对所有查询不返回任何内容

ruby-on-rails - Postgres + Heroku SSL SYSCALL 错误

ruby-on-rails - 通过 rails 从 postgresql 中删除列

sql - 连接条件为 where 子句时使用的连接类型

mysql - 我正在尝试执行 mysql 查询以获取只供应红色部分的供应商?

mysql - SQL IN 运算符选择 ORDER?

postgresql - Postgres : creating DATE Dimension as per Ralph Kimball

sql - 当我有 PG::UndefinedColumn: ERROR