将一个SQL列合并到另一个SQL列中并删除重复项

时间:2016-06-04 17:19:05

标签: mysql sql

我已经搜索过高低,也许我找到了答案,但是我无法实现它,所以如果你能提供帮助那就太好了。

我的数据库表中有两列:

USERID | FRIENDID
-------+----------
887    | 553
54     | 887
23     | 887 

我需要获取说USERID = 887的数据。

这是我的疑问:

SELECT  
    `userid`, `friend_id`
FROM  
    friends 
WHERE 
    userid = 887 or FRIENDID = 887

现在这正在按照我的预期返回数据,但是我需要像这样显示数据:

IDS
------    
887 
553 
887
887     
54
23

因此,两列数据都被推入一个,如果可能,请删除重复的ID 887

3 个答案:

答案 0 :(得分:2)

(select userid as id from friends where userid = XXX)
union
(select friend_id as id from friends where friend_id = XXX)

说明:使用union来合并useridfriend_id的两个查询的结果。 使用distinct删除重复项。UNION已经对结果集做了明确的分析。

答案 1 :(得分:0)

我创建了一个测试表,并添加了一些额外的值,以确保它只返回您想要的值。

您需要做的就是使用union来获取不同的值。在第一个选择中,您将获得UserID,在第二个选择中,您将获得FriendID。在两者中使用相同的WHERE子句,以便获得所需的所有值。

CREATE TABLE #Friends (UserID INT, FriendID INT)

INSERT INTO #Friends 
VALUES (887,553),(54,887),(23,887),(74,66),(89,49)

SELECT * FROM #Friends

SELECT IDs = UserID
FROM #Friends 
WHERE UserID = 887 OR FriendID = 887

UNION 

SELECT IDs = FriendID
FROM #Friends 
WHERE UserID = 887 OR FriendID = 887

答案 2 :(得分:0)

其他示例不会返回您想要的内容,一个不同ID的列表

with cte as (
   SELECT  
       userid id
   FROM  
       friends 
   WHERE 
       userid = 887 or FRIENDID = 887
   UNION
   SELECT  
       FRIENDID
   FROM  
       friends 
   WHERE 
       userid = 887 or FRIENDID = 887
) SELECT DISTINCT id From cte