gpt4 book ai didi

mysql - 不同列之间的 SQL 不同

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:05 26 4
gpt4 key购买 nike

我有一个包含 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

最佳答案

假设 column1 和 column2 都是数字数据类型并且您正在比较 2 列,您可以使用以下内容

SELECT DISTINCT
LEAST( column1 , column2 ) AS leastColumn,
GREATEST( column1 , column2 ) AS greatestColumn
FROM yourTable

我不完全确定您为什么要这样做,就好像两列存储相同的数据那么这个表是 n:m 关系的一部分,因此可以进一步规范化。此外,随着数据集的增长,这将变得非常低效,但对于您的特定问题,这符合要求。

关于mysql - 不同列之间的 SQL 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17077291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com