2013-11-20 2 views
0

다른 사람이 작성한 코드를 이해하려고합니다. closure 테이블에는 ancestor, descendantlength이라는 3 개의 열이 있습니다. 내가 도움을 싶습니다이 SELECT 문을 번역 할 수 있습니까?

쿼리는 다음과 같습니다

INSERT INTO table1 (ancestor, descendant, length) 
SELECT a.ancestor, 12, a.length+1 
    FROM closure a 
    WHERE a.descendant=11; 

는 일반적으로 나는 SELECT 문 다음에 열 이름을 기대.

+0

은 완전한 문장이 정말? 계층 구조 탐색의 일부인 것처럼 보입니다. 더 큰 재귀 쿼리의 일부로 쿼리를 볼 것으로 예상됩니다. –

답변

6

ancestor, 리터럴 번호 12을 선택한 다음 length 값에 1을 더한 값을 선택합니다. 열 descendant이 11 인 행에 대해이 작업을 수행합니다.

select 문에서 리터럴을 선택하고 산술을 수행하는 것을 막을 수있는 방법은 없습니다. 당신이 당신의 응용 프로그램 코드에서 열 이름 값에 액세스하고자하는 경우

, 당신은 아마 AS somename를 사용하여 그 마지막 두 이름을 지정할 (예를 들어 SELECT 12 as number, ...는)

+0

제가 올바르게 이해하는지 확인합시다. 먼저 쿼리는'descendant '가'11' 인 모든 레코드를 식별합니다. 그 결과 레코드 목록이 생성됩니다. 그런 다음 레코드를 가져 와서'descendant '의 값을'12 '로 바꾼다. 그러면'length'의 값에 하나가 더해진다. 옳은? (그런 다음 그것들을'table1'에 삽입합니다. 그러나 제 질문은 실제로'SELECT'에 관한 것입니다.) – JDelage

+1

기본적으로. 그것은'SELECT'의 테이블에서'descendant'를 검색하지 않거나 그것을 대체합니다. 그것은 단지'SELECT' 절에서 제공된 리터럴 값'12'을 사용합니다. 그러나, 그 행에 대해'length'의 값을 검색하고 그 행에 1을 더합니다. 그리고 나서 테이블에 다시 삽입됩니다. – bhamby

관련 문제