2016-06-04 3 views
-1

저는 높은 값과 낮은 값을 검색했으며 어쩌면 답을 찾지 만 도움이 될 수 있으면 구현할 수 없습니다. 내가 USERID = 887를 말에 대한 데이터를 얻을 필요가하나의 SQL 열을 다른 열로 병합하고 중복을 제거하십시오.

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

:

나는 내 데이터베이스 테이블에 두 개의 열이 있습니다.

내 쿼리입니다 :

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

내가 예상대로 이제이 데이터를 반환 그러나 나는 다음과 같이 제시하는 데이터가 필요 : 데이터의

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

그래서 두 열이 하나에 넣고 가능한 경우 중복 ID를 제거하십시오. 887

+1

'mabye 나는 답을 발견하지만 난 it'을 구현할 수 없습니다 [원문] - 대답은 무엇인가 찾았 니? –

+0

이렇게하면 두 개의 서로 다른 쿼리 사이에 'UNION'또는 PHP로 수행해야합니다. 나는 왜 누군가가 자신의 친구 목록에 사용자를 포함 시키거나 다른 사람이 단순히 그 사람을보기를 원할 때 자신의 친구 목록을 보여주고 싶은지를 알 수는 없다. –

+0

내가 원하는 출력을 제시하는 합리적인 이유를 찾을 수 없습니다. 그 6 개의 숫자의 의미는 무엇입니까? – Trix

답변

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

설명 : 사용 및 friend_id에 대한 두 개의 쿼리 결과를 결합하는 데 필요한 정보는입니다. 중복을 제거하려면 distinct을 사용하십시오. . UNION은 이미 결과 집합에 대해 고유 한 작업을 수행합니다.

+0

바깥 쪽의 'DISTINCT'는 반드시''UNION의 기본 동작은 중복 된 행이 결과에서 제거된다는 것입니다.]] (http://dev.mysql.com/doc/refman/5.7/en/union. html) – Sean

+0

@Sean : 실제로. 그에 따라 내 대답을 수정. –

0

테스트 테이블을 만들고 추가 값을 추가하여 원하는 결과 만 반환하는지 확인했습니다.

고유 값을 가져 오기 위해 유니온을 사용해야합니다. 첫 번째 선택에서는 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

이 코드가 작동하는 경우 OP 문제를 해결하는 이유를 설명하는 텍스트를 추가하는 것이 좋습니다. – lmo

+0

감사합니다. 코드를 변경하고 왜 작동하는지에 대한 설명을 추가했습니다. :) – TheSQLGirl

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 
관련 문제