私はSQLを持っています。Table
Messages
それには4つの列があります
1. sno
2. sender_id
3. reciever_id
4. message
いずれかが 1 に等しい場合、 sender_idとreceiveer_idの aであるSELECT
ステートメントを作成する必要があります。unique combination
また、 (1,3)の組み合わせが含まれている場合、(3,1)は無視する必要があります。
助けていただければ幸いです
ほとんどの RDBMS で機能する SQL:
SELECT DISTINCT
CASE WHEN sender_id > reciever_id THEN reciever_id ELSE sender_id END,
CASE WHEN sender_id > reciever_id THEN sender_id ELSE reciever_id END
FROM
MyTable;
MySQL SQL ダイアレクト (および ANSI SQL):
SELECT DISTINCT
LEAST(sender_id, reciever_id)
GREATEST(sender_id, reciever_id)
FROM
MyTable;
@Edperのコメントの後に編集
CASE 条件は変更されますが、THEN/ELSE 列も交換する必要があります
SELECT DISTINCT
CASE WHEN sender_id > reciever_id THEN reciever_id ELSE sender_id END,
CASE WHEN sender_id <= reciever_id THEN reciever_id ELSE sender_id END
FROM
MyTable;
テーブル #temp を作成します (sno int , sender_id int, reciever_id int)
#temp に挿入
「1」、「1」、「1」を選択
ユニオンオール
「2」、「2」、「2」を選択
ユニオンオール
「3」、「3」、「3」を選択
ユニオンオール
「1」、「1」、「1」を選択
ユニオンオール
「2」、「2」、「2」を選択
ユニオンオール
「3」、「3」、「3」を選択
ユニオンオール
「3」、「3」、「3」を選択
ユニオンオール
「1」、「1」、「3」を選択
ユニオンオール
「1」、「3」、「1」を選択
ユニオンオール
「1」、「4」、「1」を選択
ユニオンオール
「1」、「1」、「4」を選択
- - これを試して:-
;
T(sender_id、reciever_id、dis)を使用
なので
( select sender_id, reciever_id ,ROW_NUMBER() over(PARTITION BY (sender_id+reciever_id ) order by (sender_id+reciever_id )) as dis from #temp
どこで (sender_id=1 または reciever_id=1)
sender_id、reciever_id でグループ化
)
T から送信者 ID、受信者 ID を選択
ここで、dis=1
これを試して:
SELECT
a.sender_id ,
a.reciever_id
FROM
Messages a
LEFT JOIN Messages b
ON a.sender_id = b.reciever_id
AND b.sender_id = a.reciever_id
WHERE
b.sender_id IS NULL
GROUP BY
a.sender_id ,
a.reciever_id
ORDER BY
NULL