2010-12-03 7 views
0

두 테이블 table1table2이 있습니다. 두 테이블의 구조는 같습니다. 그들은 두 번째 표에 x1, y1, z1w1x2, y2, z2, w2의 두 열이 있습니다.하나의 명령으로이 작업을 수행 할 수 있습니까?

두 번째 테이블의 첫 번째 열 (x2)의 값을 추출하고 싶습니다. 절차는 다음과 같습니다 :

  1. y2=y0w2=w0 인 두 번째 테이블에서 모든 행을 추출합니다.
  2. 추출 된 모든 행에 대해 처음 세 열 (x_i, y_iz_i)의 값을 취합니다.
  3. 첫 번째 표에서 x1==x_i and y1==y_i and z1==z_i에 해당하는 모든 행을 추출합니다 (사전에 하나 또는 제로 행이 추출된다는 것을 알고 있습니다).
  4. 추출 된 행 (있을 경우)의 열 w1에서 값을 확인하십시오. w0과 같지 않으면 x_i을 목록에 추가하십시오. 첫 번째 테이블에서 추출 된 행이 없으면 x_i을 목록에 추가하십시오.
  5. 반복 I가 x2 (중복 없음)에서 고유 한 값리스트를 갖고 싶어 결국 1 단계

상기 제 2 표로부터 추출 된 모든 행에 대해이 절차.

제 질문은 설명 된 절차를 하나의 명령으로 수행 할 수 있는지입니다.

w0y0이 알려져 있고 (다만 어떤 고정 값) 고정 덧붙였다.

+0

'w0' 및'y0 '은 무엇입니까? –

+0

wtf, 어디서부터'w0'와'y0'가 있습니까? 그리고 조인에 대해 들어 본 적이 있습니까? : D – joni

+0

그리고 신을 위해서, raw를 row로 대체하십시오! – joni

답변

1

null 값만있는 table1에 idColumn이 필요합니다. 왼쪽 조인 (조건 번호 3을 나타냄)이 실제로 결과를 생성했는지 여부를 테스트하는 데 사용됩니다. 테이블의 다른 C 럼 중 하나가 널값을 허용하지 않으면, idColumn 대신이 값을 사용할 수 있습니다.

 
select distinct t2.x2 
from table2 as t2 
left join table1 as t1 on t1.x1 = t2.x2 and t1.y1 = t2.y2 and t1.z1 = t2.z2 
where t2.y2 = y0 and t2.w2 = w0 and (t1.w1 w0 or t1.idColumn is null) 
+0

답변 해 주셔서 감사합니다! 대부분의 쿼리 명령을 이해하지만 마지막 부분에 몇 가지 문제가 있습니다. 당신은 "idColumn은 null 값을 가지지 않을 것"이라고 말하고 "t1.idColumn is null"명령을 사용합니다. 그래서, null 값만있는 경우 null이 될 수있는 방법을 이해할 수 없습니다. – Roman

+0

@Roman, null 값은 왼쪽 조인에 의해 유도됩니다. 위키 백과에서 외부 조인에 대한 다음과 같은 기본 세부 정보를 확인하십시오. http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join – Ella

관련 문제