2013-05-14 9 views
0

이 쿼리 용량은 액세스 2000"하위 작업에서 유니온 작업이 허용되지 않음"은 하나의 쿼리로이를 해결할 수있는 방법입니까?

SELECT (Members.First_Name + " " + Members.Last_Name)AS Member, 
(SELECT Friend_E_Mail, 
FROM Friends,Members WHERE My_E_Mail = ? and Friend_E_Mail <> ? 
UNION ALL 
SELECT My_E_Mail,FROM Friends,Members 
WHERE Friend_E_Mail = ?and My_E_Mail <> ?) AS E_Mail , 
(Members.First_Name) AS Name 

FROM Members,Friends 

샘플 테이블

를 작동하지
Members(all VARCHAR)  SOME DATA 
First_Name    Alester Jude Carl Jones 
Last_Name    A  B C J 

FRIENDS(ALL VARCHAR) 
My_E_Mail    [email protected] [email protected] [email protected] 
Friend_E_Mail   [email protected] [email protected] [email protected] 

원하는 출력하는 경우 (위의 질의에 "?": [email protected])

+--------------+-----------+------------+ 
|Member  |E_Mail  | Name  | 
+---------------------------------------+ 
Alester A [email protected] Alester 

원하는 출력 (위 쿼리에서 "?"는 [email protected])

+--------------+-----------+------------+ 
|Member  |E_Mail  | Name  | 
+---------------------------------------+ 
Jude B  [email protected] Jude 
carl C  [email protected] Carl 
Jones J  [email protected] Jones 

추신 : "?" "?"문자를 전달하는 쿼리 문자열 매개 변수입니다. 나는 그것이 잘 작동하는 것을 안다.

내 질문은 : 나는이 오류가

이 하나의 단일 할 필요가 있기 때문에 내가 여러 쿼리를 저장 프로 시저를 사용하거나 사용하지 않고 사용할 수있는 쿼리 주변의 일을 자신의 것입니다 "작업 하위 쿼리에서 허용되지 않음"계속 질문!?

감사합니다.

+0

My_E_Mail과 Friend_E_Mail이 모두 Friends 테이블에있을 때 UNION 쿼리에 멤버를 포함시키는 이유는 무엇입니까? –

답변

0

select 부속 조회에서 1 행 이상을 리턴 할 수 없습니다. 이 경우 CASE 표현식을 사용해야합니다. 그것은 각 친구에 대한 행을 반환합니다

SELECT (m.First_Name + " " + m.Last_Name) AS Member, 
     case 
     when f1.my_email is null 
     then f2.my_e_mail 
     else f1.friend_email 
     end as email, 
     m.First_Name AS Name 
from members m 
left outer join friends f1 
    on m.email = f1.my_e_mail 
    and f1.friend_e_mail = ? 
left outer join friends f2 
    on m.email = f2.friend_e_mail 
    and f2.my_e_mail = ?; 

타이스 방법 :

은 당신이 뭔가를 할해야합니다. 필드의 이름이 좋지 않다는 것을 알 수 있습니다. my_e_mais는 그렇게 대표적이지 않습니다.

+0

@Rodigo 'SELECT (Members.First_Name +' '+ Members.Last_Name) AS 회원 (Friends.My_E_Mail이 NULL 인 경우) 그 다음 Friend.My_E_Mail ELSE Friends.Friend_E_Mail END) AS E_Mail, Members.First_Name AS 이름 FROM 멤버 LEFT OUTER JOIN 친구 ON Members.E_Mail = 친구 .My_E_Mail 및 친구 .Friend_E_Mail =? LEFT OUTER JOIN 친구 ON Members.E_Mail = 친구 .Friend_E_Mail 및 Friends.My_E_Mail = ?; ' –

+0

위의 몇 가지 이유 때문에 작동하지 않습니다 –

+0

아케이드가 아쉽습니다. Access IIF() 복용량에서 작동하지 않습니다. 대단히 감사합니다. –