2013-10-20 6 views
0

path의 해시 및 parType 열을 동일한 테이블의 데이터로 업데이트하려고합니다. 나는 대답을 다음 SQL에서 그렇게 할 수는 있지만, 업데이트는 실패 할 것으로 보인다.동일한 테이블의 데이터로 테이블 업데이트

해시 = 0 및 parType = 0 인 모든 행을 동일한 행 ID 및 parType = 해당 행의 상위 ID의 유형 값으로 업데이트합니다.

원하는 결과가 표시되면 이해할 수 있습니다.

도와 주시겠습니까? 제 SQL은 신경 쓰지 마세요.

는 SQL

update path t join(
select t1.id, t1.type, t2.parent from path t1, path t2 where t1.parent = t2.id; 
) as p on p.id=t.id set hash = t1.id and parType = t1.type; 

업데이트하기 전에

"id" "type" "parent" "hash" "parType" 
"1"  "0"  "0"   "0"  "0" 
"2"  "2"  "1"   "0"  "0" 
"3"  "3"  "2"   "0"  "0" 
"4"  "4"  "3"   "0"  "0" 

원하는 결과

"id" "type" "parent" "hash" "parType" //parType = the type of the parent 
"1"  "0"  "0"   "1"  "0" 
"2"  "2"  "1"   "2"  "0" 
"3"  "3"  "2"   "3"  "2" -> This is value from the parents type 
"4"  "4"  "3"   "4"  "3" 

편집 -이 작동하지만, 나는 아직도 그것이

update path a join(
select t1.id as hash, t2.type as parType from path t1 inner join path t2 on t1.parent = t2.id 
) b on a.id=b.hash set a.hash = b.hash , a.parType = b.parType; 
+0

당신이 어떤 오류 메시지가 무엇입니까? – Martao

+0

오류 메시지가 없습니다. 아무것도 업데이트되지 않습니다. – jmenezes

+0

왜 두 SQL 쿼리? – sarwar026

답변

0

나는 내부를 변경 한

update path t join(
select t1.id, t2.type, t2.parent from path t1, path t2 where t1.parent = t2.id; 
       ^^ 
) as p on p.id=t.id set hash = t1.id and parType = t2.type; 
                ^^ 

t1.type에서 가입 해주십시오과 시도 할 수있는 올바른 방법인지 확실하지 않다 t2.typeON의 조건은 parType = t1.type에서 parType = t2.type

+0

귀하의 sql은 작동하지 않는 내 진술서에서 sql의 복제본입니다 – jmenezes

+0

이것은 복제품이 아니므로 SQL 아래에 내 의견을 읽지 마십시오. 작동하지 않을 수도 있지만 복제본이 아닙니다! – sarwar026

+0

업데이트 된 답변을 확인하십시오. 마지막 하나는 작동하지만, 나 혼자서 한 후에 오류가있을 수 있습니다. – jmenezes

1

입니다.

UPDATE table1 t LEFT JOIN 
(SELECT t1.id,t1.type FROM table1 t1 INNER JOIN table1 t2 ON t1.id>t2.id GROUP BY t1.id) as p 
ON p.id+1=t.id SET t.hash=t.id,t.parType=ifnull(p.type,0) 

SQL fiddle

+0

parType은 부모 행의 유형이어야합니다. 내 원하는 결과를 참조하십시오. – jmenezes

+0

맞아. 하지만'>'과 다른 것들을 사용하는 대신 부모 ID와 메인 ID를 사용하는 것이 낫지 않을까요? – jmenezes

+0

여전히 내부 조인, 필드는 중요하지 않습니다, 속도 현명. – Mihai

0

노력이

update t set 
    hash = t.id, 
    partype = p.type 
from path t 
    left join path p 
     on p.id = t.parent 
where hash = 0 
    and parType = 0 
+0

:-) parType은 부모 행의 유형이어야합니다. – jmenezes

+0

왜 이런 식으로 전혀 업데이트되지 않는지 나는 알 수 없다. – jmenezes

+0

Whay는 모든 것이 정상적으로 보일 때라도 오류를 반환합니까? '/ * SQL Error (1064) : SQL 구문에 오류가 있습니다. 올바른 경로를 사용하는 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 왼쪽 경로에 p p.id = t.parent 해시 = 0 '줄 4 * /' – jmenezes

관련 문제