我有一个包含 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 的不同列表。(即它会返回用户 ID 3 两次)。我希望这是足够的信息来提供帮助。
**
更新:
**
这是我最终使用的查询:
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