2011-09-06 3 views
0

나는 정말 이상한 상황이있다. I는 I가 사용되도록 동일한 테이블에 두 개의 행 사이의 열 값을 바꿀 필요가 (S1S2 두 행 어디)MySQL을 사용하여 같은 테이블 내의 값을 바꾼다

UPDATE table s1, table s2 
SET s1.data = s2.data, s2.data = @temp 
WHERE @temp:=s1.data AND [some expression that works] 
ORDER BY s2.data ASC 
LIMIT 1 

이 오류 UPDATE 질서 잘못된 사용으로 발생

가장 가까운 작은 데이터 항목을 원래 항목에 입력하고 두 값을 바꿔 넣기 만하면됩니다.

SELECT * FROM table s1, table s2 
WHERE [the same expression that works] 
ORDER BY s2.data ASC 
LIMIT 1 

를 수행하면 필요한 결과 테이블을 반환하지만, 언급 UPDATE이 작동하지 않습니다. 나는 무엇이 잘못 되었는가?

+0

'ORDER BY'의 열이 속한 테이블 만 수정하는 경우에만'ORDER BY' 만 사용할 수 있다고 믿습니다. 나는 당신이 실제로 하나의 테이블만을 수정하고 있다는 것을 알고 있지만, MySQL은 그런 식으로는 보지 않을 수도 있습니다. – NullUserException

+0

또한 왜 'LIMIT 1' 절이 있습니까? 적어도 2 개의 행을 수정하지 않습니까? – NullUserException

+0

난 그냥 ** ** s1.order ASC ** ** 처음 ** 주문 후 추가 시도가 성공하지 못했습니다. 다시 같은 오류가 발생합니다 ... –

답변

0

분명히 내가 원하는 것은 하나만 할 수 없다. 쿼리. 나는 각각의 열에 대해 SELECTUPDATE의 세 가지 쿼리를 수행하고 PHP에 임시 변수를 사용했습니다. 나는 또한 임시 변수로 3 개의 연속 된 쿼리를 수행 할 수 있다고 생각한다.

관련 문제