Mysql

在單個請求中為另一個查詢重用 sql 查詢值

  • March 17, 2020

我有一個用於與表聊天的 sql 表messages,其中包含 id int pk, chat_id int, created_at timestamp.

給定一條消息id,是否可以在單個查詢中在同一聊天中選擇它以及它之後的 5 條消息?

或者我可以以某種方式組合以下兩個子查詢(starting_message_id作為輸入)?

SELECT * FROM messages WHERE chat_id IN (
   SELECT chat_id from messages where id='starting_message_id'
) AND created_at > (
   SELECT created_at from messages where id='starting_message_id'
) ORDER BY created_at ASC LIMIT 5;

我覺得只有兩個請求就足夠了:

  1. 按聊天 ID 選擇 chat_id 和 created_at 列
  2. 選擇一些已知所有數據的消息

正確的優化語法是什麼?

我相信你想要這樣的東西:

SELECT msg.* 
FROM messages msg
JOIN (SELECT chat_id, created_at
 FROM messages
 where id='starting_message_id') nested
ON (msg.chat_id=nested.chat_id and msg.created_at>=nested.created_at)
ORDER BY msg.created_at
LIMIT 6;

引用自:https://dba.stackexchange.com/questions/262065