2010-01-29 3 views
1

는 첫째로, 나는이 MySQL의의 5.1.x의로 불가능 알고, 그렇게 바로 여기 말한다 :MySQL의 UPDATE와 SELECT

http://dev.mysql.com/doc/refman/5.1/en/update.html

내가 생각 부탁 해요하는 경우입니다 작업을 수행하기 위해 빠른 스크립트 작성에 의존하지 않고 임시 테이블/뷰를 사용하여 쿼리를 실행하는 영리한 방법이 있습니다. 내가 노력하고있어

UPDATE some_table 
set some_col = (SELECT some_othercol 
       from some_table 
       WHERE some_col > some_othercol 
       ); 

궁극적으로 sol_col > some_othercol 경우 some_othercol의 값으로 some_col을 설정 : (완전히 잘못이며, 이것을 집에서 시도하는 사람들을 위해 그냥 참고로, 작동하지 않습니다) 내 쿼리는 다음과 같이 보입니다.

스크립트를 사용하지 않고 이것을 처리하는 가장 좋은 방법은 무엇입니까?

편집 내 부속 조회가 둘 이상의 행을 반환합니다!

+1

정확히 무엇을하려고합니까? 이 쿼리는 각 행의 some_col 값을 값 집합으로 설정하려고합니다. 논리적으로 최종 결과는 무엇입니까? – Aaron

답변

0
+0

미안하지만 주소 위의 URL을 생각하지 않는 중요한 비트를 추가해야합니다. 하위 쿼리가 여러 행을 반환합니다. – randombits

+0

개념적으로도 의미가 있습니까? 단일 필드 값을 여러 행과 관련된 값으로 설정할 수 있습니까? 하위 쿼리는 업데이트되는 행에 따라 다릅니다 ... 여러 개의 업데이트 행이있는 경우 쿼리를 작성하여 하위 쿼리가 내가 믿는 각각에 대해 실행되도록해야합니다. –

2

나는 이것이 당신이하려고하는 것이지 확실치 않지만, 아마도 당신에게 올바른 길을 제시 할 수있는 것을 보여줄 수 있습니다.

UPDATE some_table ST 
SET some_col = (
    SELECT some_col 
    FROM some_table OT 
    WHERE OT.ID = ST.ID 
) 
WHERE ST.some_col > 2 
some_col 이미 나는이 아무것도하지 않습니다 알고보다 2 경우에만 자신의 값으로 some_col 설정할 수 있지만 것

, 그러나 당신이 무엇을 찾고 있는지에 근접 할 수있는 개념을 보여줍니다 에 대한. 결국 무슨 일이 일어날 지에 대해 좀 더 자세히 설명해 주면, 내가 원하는 것에 더 가까운 해결책을 찾도록 도울 수 있습니다.

+2

나는 이것이 MySQL에서 오류를 던질 것이라고 생각한다. 왜냐하면 업데이트되는 테이블과 동일한 테이블을 사용하는 sub-select가 있기 때문이다. –

3

왜 하위 쿼리가 필요한지 이해가 안됩니다. 이 작업이 원하는 작업을 수행하지 않습니까? :

UPDATE some_table 
SET some_col = some_othercol 
WHERE some_col > some_othercol