2013-03-03 2 views
0

두 개의 동일한 sql 쿼리가 있는데 결과를 병합하고 싶습니다.두 개의 동일한 선택 쿼리 병합

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.FRIEND_ID=". $userID ." 
    AND APPROVED='YES' 
    AND USER.USER_ID=FRIENDLIST.USER_ID 
    AND USER.USER_ID=USER_PROFILE.USER_ID 

내가 노동 조합과 시도하지만 난 빈 결과가 아닌, 예를 들어 $ 사용자 ID = 2 2 개 행을 얻을 :

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.USER_ID=". $userID ." 
    AND APPROVED='YES' 
    AND USER.USER_ID=FRIENDLIST.USER_ID 
    AND USER.USER_ID=USER_PROFILE.USER_ID 

두 번째는 다음과 같습니다 첫 번째입니다.

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.USER_ID=". $userID ." 
    AND APPROVED='YES' 
    AND USER.USER_ID=FRIENDLIST.USER_ID 
    AND USER.USER_ID=USER_PROFILE.USER_ID 
UNION 
SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.FRIEND_ID=". $userID ." 
    AND APPROVED='YES' 
    AND USER.USER_ID=FRIENDLIST.USER_ID 
    AND USER.USER_ID=USER_PROFILE.USER_ID 

어떤 아이디어 ??

+1

분명히 말하면 각각의 개별 쿼리는 $ userID = 2 (즉 2 행을 산출)에서 작동하지만 UNION은 빈 결과 집합을 제공한다고 말하는 것입니까? – fenway

+0

그들 각각은 1 행을 반환합니다. 노동 조합과 함께 2를 기대하지만 0이됩니다. – Kostis

+0

최소한 UNION ALL이 필요합니다. 그렇지 않으면 복제본이 제거되어 조작이 무의미 해집니다. – BellevueBob

답변

0

나는 이런 식으로 그들을 결합 것 :

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE (FRIENDLIST.USER_ID=". $userID ." or FRIENDLIST.FRIEND_ID=". $userID .") 
    AND APPROVED='YES' 
    AND USER.USER_ID=FRIENDLIST.USER_ID 
    AND USER.USER_ID=USER_PROFILE.USER_ID 

음, 엄격하게 사실이 아니다. 나는 테이블에 대한 짧은 별칭을 조인에 대한 올바른 구문을 사용하고 사용합니다 :

SELECT u.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST f join 
    USER u 
    on u.USER_ID = f.USER_ID join 
    USER_PROFILE up 
    on u.USER_ID = up.USER_ID 
WHERE (f.USER_ID=". $userID ." or f.FRIEND_ID=". $userID .") and 
     APPROVED='YES' 

union이 같은 일을하고 또 다른, 덜 효율적인 방법이다. 결과 집합이 비어 있으면 조건과 일치하는 사람이 없기 때문입니다.