복붙노트

[SQL] MySQL의 : 한 테이블에서 레코드를 카운트 한 다음 다른 업데이트

SQL

MySQL의 : 한 테이블에서 레코드를 카운트 한 다음 다른 업데이트

있어 두 테이블 / 기관, 매우 간단 시나리오.

표 시인 - 열 : ID, 시인, 국가

표 국가 - 열 : ID, 국가, 수

기본적으로, 시인에 대한 국가 자연스럽게 많은 하나의 매핑을 가지고있다. 예를 들어, 60 개국 1,000 시인이있다. 시인의 각 시인은 국가에서 국가의 하나의 ID가 들어있는 국가 필드에 의해 국가에 할당됩니다.

국가의 카운트 필드는이 나라에서 시인의 시인의 수를 포함합니다.

내 질문은 시인에 국가에 의해 시인의 수를 계산 한 SQL 쿼리를 사용하고 해당 국가의 해당 수를 업데이트하는 방법은?

나는 시도했다 :

UPDATE poets, nations SET nations.count = COUNT(poets.id) GROUP BY poets.nation HAVING poets.nation = nations.id

그러나 # 1064 오류가 있습니다. 또한 WHERE 절 어딘가에 결합하는 시도했지만 여전히 일에 거부합니다.

어떤 생각?

해결법

  1. ==============================

    1.하위 쿼리를 사용합니다 :

    하위 쿼리를 사용합니다 :

    UPDATE nations 
       SET count = (
           SELECT COUNT(id) 
             FROM poets 
            WHERE poets.nation = nations.id 
            GROUP BY id
           );
    
  2. ==============================

    2.당신은 GROUP BY, CF 필요가 없습니다 :

    당신은 GROUP BY, CF 필요가 없습니다 :

    UPDATE nations SET count = (
      SELECT COUNT(id) FROM poets 
        WHERE poets.nation = nations.id);
    

    또는 오히려, GROUP BY와 함께, 서브 쿼리하지 시인이 나라에 대해 NULL을 반환합니다. GROUP BY없이, 하위 쿼리는이 경우 0을 반환합니다.

  3. from https://stackoverflow.com/questions/1216175/mysql-count-records-from-one-table-and-then-update-another by cc-by-sa and MIT license