mysql - 如何获取包含双重 ID 引用的行

标签 mysql sql greatest-n-per-group

我有一个消息表:

messages:
    id(int)
    send_id(int)
    receive_id(int)

我希望仅当 a->b 和 b->a 存在时才能够从中选择行,例如:

    id     send_id recieve_id
    0,     15,     16
    1,     16,     15

这样一来,基本上每个人都收到了一条消息。我将如何能够只选择这两行中的一排(发送或接收),以及所有那些用于特定 ID 的行。

我只想返回具有这种双重性的结果。

我的代码目前使用嵌套的 SELECT 并且根本无法按需工作。

最佳答案

您可以利用 MySQL 的 LEASTGREATEST 内置函数来实现这一结果。

SELECT  *
FROM    messages
WHERE   (LEAST(send_id, recieve_id), GREATEST(send_id, recieve_id), id)       
IN 
(
    SELECT  LEAST(send_id, recieve_id) as x, 
            GREATEST(send_id, recieve_id) as y, 
            MAX(id) msg_ID
    FROM    messages 
    GROUP   BY x, y
);

关于mysql - 如何获取包含双重 ID 引用的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15017968/

相关文章:

javascript - 带有超时的JS函数应该每4秒发送一次数据,但只发送1次

mysql - 如何将 NULL 视为最小值?

计算列上的 MySQL IF 语句

mysql - 计算给定月份表中的所有行,而不仅仅是该月添加的行

mysql - 在等于之前不等于的 SQL 性能,反之亦然

MySQL 查询结果返回意外数据

sql - 需要有关 SQL 中复杂 Join 语句的帮助

mysql - 使用 group by 和 Laravel 获取最新行

mysql - 日期的 SQL 查询聚合

Laravel Eloquent 获取分组行的最新行