1

我有表“s_msgs”,他的结构是

id | from | to
------------------
1 | John | Robert
2 | John | Michael
3 | Robert | John 
4 | Michael | John 

我需要获取每对消息的发送方-接收方,即结果必须是

John | Robert 
John | Michael

我写了查询,但我认为这不是最佳变体,更希望在表中会有几百万行,所以谁能告诉更多的最佳查询?

这是我的查询

          SELECT `from`,`to` FROM s_msgs WHERE id IN( 

             SELECT id FROM (
                 SELECT  MIN(id) AS id, 
                    CASE 
                        WHEN STRCMP(`to`,`from`) = -1 THEN CONCAT(`to`,`from`) 
                        ELSE CONCAT(`from`,`to`) 
                    END
                    AS conc
                FROM s_msgs

                GROUP BY conc

                ) AS t
            )
4

1 回答 1

1

怎么样

SELECT DISTINCT `from`, `to`
FROM YOUR_TABLE
UNION 
SELECT DISTINCT `to`,`from`
FROm YOUR_TABLE

编辑

有一个新的,是救了我的ID。

看看这个演示

SQL 小提琴演示

SELECT *
FROM   MY_TABLE f 
WHERE  NOT EXISTS (
                    SELECT 1 
                    FROM MY_TABLE t 
                    WHERE f.`from` = t.`to` 
                    AND f.`to` = t.`from` 
                    AND f.id > t.id)
于 2012-09-25T18:27:05.570 回答