クエリで取得したい 2 つの ID を含むテーブルがあり、それらを区別したいと考えています。ただし、列間で区別したいので、次のようにします。
| column1 | column2 |
| 2 | 3 | row1
| 2 | 4 | row2
| 3 | 2 | row3
| 3 | 2 | row3
行 1 と行 2 を返す必要があります。何か助けはありますか?
編集:
申し訳ありませんが、それはちょっと漠然としていて、投稿するときに急いでいました. したがって、これらの列はどちらも同じテーブルを参照する ID です。これをユーザー間のメッセージと考えてみましょう。問題のテーブルはメッセージであり、ID はユーザー ID (送信者用、受信者用) です。したがって、メッセージ テーブルは次のようになります。
| sender_id | receiver_id |
| 2 | 3 | message1
| 2 | 3 | message2
| 3 | 2 | message3
各ユーザーは好きなだけ他のユーザーにメッセージを送ることができるので、各ユーザー間で多くのメッセージを送ることができます。特定のユーザーがメッセージを送信したユーザーを知りたい。したがって、ID 2 のユーザーが誰にメッセージを送信したかを調べるためのクエリが必要です。したがって、この理論上のクエリは、ユーザー ID 2 を指定すると、ユーザー ID 3 のみを返す必要があります。実際には、検索しているこれらのメッセージは気にしません。検索対象のユーザーではないメッセージに関連付けられているユーザーだけです。 、一意の値を持つリストが必要です。
私は次のようなことを試しました:
SELECT sender_id, receiver_id FROM messages
WHERE sender_id = 2 OR receiver_id = 2
GROUP BY sender_id
GROUP BY receiver_id
と
SELECT DISTINCT sender_id, receiver_id FROM messages
WHERE sender_id = 2 OR receiver_id = 2
ただし、これらは ID の 1 つの個別のリストのみを返します。(つまり、ユーザー ID 3 が 2 回返されます)。これが役立つ十分な情報であることを願っています。
**
アップデート:
**
これは私が最終的に使用したクエリです:
SELECT DISTINCT other_user_id FROM (
SELECT sender_id AS some_user_id,
receiver_id AS other_user_id FROM messages
UNION
SELECT receiver_id AS some_user_id,
sender_id AS other_user_id FROM messages
)
WHERE some_user_id = whatever_value