2011-02-01 7 views
0

변수 'userid'가 있다고 가정 해 봅시다. aspnet_Membership 및 aspnet_AccountProfile 테이블 중에서 선택하고 싶습니다. 둘 다 컬럼 사용자 ID를 가지고 있습니다. SELECT * FROM aspnet_AccountProfile, aspnet_Membership WHERE UserId = @ UserId와 같은 명령문을 작성할 수 있기를 원하며 양쪽 테이블에 일치하는 사용자 ID를 가진 레코드를 가져옵니다. 어떻게해야합니까? 고맙습니다!두 테이블 모두에서 하나의 변수를 사용하여 두 테이블의 데이터를 가져 오는 방법은 무엇입니까?

답변

2

JOIN :

정확히 당신이 원하는 데이터를 기반으로 조인의 몇 가지 기본 유형이 있습니다. 이것들은 집합 이론/관계 대수와 관련이 있습니다. 나는 가장 일반적인 나열됩니다 : 당신은 두 테이블이 일치하는 사용자 ID가 행의 가능한 모든 조합을 반환 할 때

INNER이

를 사용하여 가입하세요. 의 일부 행 테이블이 내부 조인에서 반환되지 않을 수도 있습니다.

SELECT * FROM aspnet_AccountProfile INNER JOIN aspnet_Membership 
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId 

내부가 (당신이 조인 이해하려면 내가 권장하지 것이다) 가입 쓰는 또 다른 방법은 다음과 같습니다

물론
SELECT * FROM aspnet_AccountProfile, aspnet_Membership 
WHERE aspnet_AccountProfile.UserId = aspnet_membership.UserId 

는, 추가, 당신이 원하는 특정 사용자 아이디를 선택 에 대한 조건 표 예 :

및 aspnet_AccountProfile.사용자 아이디 = @UserId

또는

및 aspnet_Membership.UserId = @UserId 그 두 가지 중 하나가 내부 조인을 위해 잘 작동합니다

.

LEFT OUTER은 쿼리의 첫 번째 테이블에서 모든 행을 반환 할 때

사용이 가입, 두 번째 테이블의 사용자 아이디가 첫 번째 일치하는 모든 조합. 두 번째 테이블 (이 경우 Membership)의 일부 행은 전혀 반환되지 않을 수 있습니다.

SELECT * FROM aspnet_AccountProfile LEFT JOIN aspnet_Membership 
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId 

당신은이 경우에 기준을 좁힐 왼쪽 열을 사용하는, 또는 자동 가입 내부로 변환 얻을 것이다.

어디 aspnet_AccountProfile.UserId = @UserId

RIGHT OUTER는 LEFT 외부 조인으로는 일반적으로 기록 될 수 있기 때문, 비교적 드물다

가입. 이것은 왼쪽 외부 조인과 비슷하지만 관계의 두 번째 테이블에있는 모든 행이 첫 번째 조인 대신 반환됩니다.

SELECT * FROM aspnet_AccountProfile RIGHT JOIN aspnet_Membership 
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId 

FULL OUTER 가입

사용이 당신은 회원의 해당 행에 AccountProfile에 일치하는 사용자 ID와 함께 모든 행을 연관해야 할뿐만 아니라 알 필요가 있다면 에 행을 테이블은 다른 테이블과 일치하지 않습니다.

SELECT * FROM aspnet_AccountProfile FULL OUTER JOIN aspnet_Membership 
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId 

단일 사용자에 대한 결과를 얻는 것은 FULL OUTER JOIN에서 조금 까다 롭습니다. 두 테이블 중 하나에서 NULL 또는 올바른 값을 사용하도록 지정해야합니다.

0

안녕,

당신이

를 사용하여 작업을 수행 할 수 있습니다 "SELECT * aspnet_AccountProfile AP에서 aspnet_Membership m WHERE ap.UserId = m.UserId ANB ap.UserId = @ UserId "

0

내부 결합으로이 작업을 수행 할 수 있습니다. 여기

는 예입니다,

Select aspnet_Membership.*, aspnet_AccountProfile.* from aspnet_AccountProfile 
inner join aspnet_Membership on aspnet_Membership.userid = aspnet_AccountProfile.userid 
where [email protected] 

이 사용자 ID가 모두 테이블에 공통 whem 만 기록을 얻을 것이다. 당신이 한 테이블에있는 레코드를 가져 싶은 또는 기타에 있지 않을 수 있습니다 경우

다음 사용자 왼쪽 당신이 가입 사용할 수 있습니다

Select aspnet_Membership.*, aspnet_AccountProfile.* from aspnet_AccountProfile 
left join aspnet_Membership on aspnet_Membership.userid = aspnet_AccountProfile.userid 
where [email protected] 
0

입니다 가입해야합니다. 같은

뭔가 : 당신은 간단한 내부를 사용할 수 있습니다

Select * from aspnet_AccountProfile INNER JOIN aspnet_Membership 
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId 
Where aspnet_AccountProfile.UserId = @UserId 

감사합니다,
Vamyip

0

이를 위해 가입 할 수 있습니다. 라고

관련 문제