2011-01-08 4 views
1

주 쿼리에서 업데이트 된 테이블에 하위 쿼리 : 테이블 태그MYSQL :이 같은 것을 할 싶습니다

  1. 이름 = 'someName'가있는 행을 찾기를하고 remeber가에서 ID
  2. 입니다 같은 테이블은 someCondition와 다른 행을 찾아이 행 안부에 refference 설정 = ID를

하위 쿼리를 사용하여이 작업을 수행하기 위해 시도 이상에서,하지만 MySQL은 내가 통해 업데이트 테이블을 하위 쿼리 수 없다는 거부 메인 쿼리에서.

어떻게 위의 아이디어를 구현할 수 있습니까?

는 당신에게 다음 UPDATE

답변

0

당신은하지만 권장되지 않습니다이

update TAGS set 
    reference = 
     (select my_id from 
      (select id as my_id from TAGS where name='someName') 
     as SUB_TAGS) 
    where someCondition; 

을 할 수 있습니다.


당신은 모두 하위 쿼리를 피할 수 1 편집 # - taspeotis rightly mentioned로, join하여 기준에 동일한 테이블을 보내고. 여기에 대한 코드는 다음과 같습니다.

UPDATE 
    TAGS t1, TAGS t2 
    SET 
    t1.reference = t2.id 
    WHERE 
     t2.name = 'someName' 
    AND 
     t1.someField = someCondition; 

이 방법이 더 좋습니다.

+0

mysql이 나에게보고 한 바로 그 문제에 대한 이중 중첩을 생각해보십시오. 그리고 왜 그럴 수 없습니까? – shealtiel

+0

임시 테이블을 사용하는 것은 바람직하지 않습니다. 이것이 제가 여기서하고있는 일입니다. 임시 테이블에는 불필요한 오버 헤드가 있습니다. – Nishant

+0

@ gidireich 와우, 내 부족의 지식이 잘못 됐나요? 인터넷 검색에서 임시 테이블의 성능 오버 헤드에 대해 많은 기사를 볼 수 없습니다. – Nishant

1

Convert your subquery to a join 및 감사 :

또한 여러 테이블을 포함하는 UPDATE 작업을 수행 할 수 있습니다. 그러나 ORDER BY 또는 LIMIT는 다중 테이블 UPDATE와 함께 사용할 수 없습니다. table_references 절은 조인과 관련된 테이블을 나열합니다. 구문은 12.2.8.1 절. "JOIN 구문"에서 설명합니다.

UPDATE items,month SET items.price=month.price 
WHERE items.id=month.id; 
The preceding example shows an inner join that uses the comma operator, but multiple-table 

UPDATE 문은 좌 가입 등의 SELECT 문에서 허용 조인의 모든 유형을 사용할 수 있습니다 예를 들면 다음과 같습니다.

관련 문제