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 に答える