簡體   English   中英

不同列之間的SQL不同

[英]SQL distinct between different columns

我有一個表,其中包含要在查詢中檢索的2個ID,並且希望它們與眾不同。 但是我希望它們在列之間是不同的,所以:

| column1 | column2 |
|    2    |    3    | row1
|    2    |    4    | row2
|    3    |    2    | row3
|    3    |    2    | row3

應該返回row1和row2。 有什么幫助嗎?

編輯:

抱歉,這有點含糊,發布時我很着急。 因此,這兩列都是引用同一表的ID。 讓我們將其視為用戶之間的消息,其中所討論的表是消息,而ID是用戶ID(一個用於發送者,一個用於接收者)。 所以消息表看起來像這樣:

| sender_id | receiver_id |
|    2      |    3        | message1
|    2      |    3        | message2
|    3      |    2        | message3

每個用戶可以根據需要發送任意其他消息,因此每個用戶之間可以有很多消息。 我想知道給定用戶向哪些用戶發送了消息。 因此,我需要查詢以查找ID為2的用戶已發消息的用戶。 因此,在給定用戶ID 2的情況下,此理論查詢應僅返回用戶ID3。我實際上並不關心正在搜索的這些消息,僅關心與之關聯的用戶,而不是我要搜索的用戶,我想要一個具有唯一值的列表。

我已經嘗試過類似的東西:

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關系的一部分,因此可以進一步規范化。 另外,隨着數據集的增長,這將變得非常低效,但是對於您的特定問題,這是合理的。

弄清楚了。 這是我最終使用的查詢:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM