2013-08-09 4 views
0

다음 SQL 명령은 여러 개체에서 찾을 수있는 hash 값을 나열합니다.그룹을 확장하고 반복하는 방법

SELECT * FROM (
    SELECT 
    MIN(id) AS id, 
    hash, 
    status, 
    count(*) AS count 
    FROM foobar 
    GROUP BY hash 
    ORDER BY count 
) AS t 
WHERE count > 1; 

...

+------+----------------------------------+--------+-------+ 
| id | hash        | status | count | 
+------+----------------------------------+--------+-------+ 
| 4523 | e4266978b1d99dffbf3a6e0b880a2c5e |  0 |  3 | 
| 828 | 9414c7478416b7a40846d66e12df9370 |  0 |  4 | 
| 293 | bfc742499fd97c4c8e36f57cdd0fa0e0 |  0 |  5 | 
| 244 | ec408e4678789f7983f83a9c330ab8e4 |  0 | 14 | 
+------+----------------------------------+--------+-------+ 
4 rows in set (0.02 sec) 

나는 그룹 내에서 각 항목의 status를 업데이트합니다. 각 26 개 개별 항목의

UDPATE foobar SET status = 9 WHERE hash = "e4266978b1d99dffbf3a6e0b880a2c5e"; 
어떻게 업데이트 할 수 있습니다

status 다음과 같이 하나의 그룹이 수행 할 수 있습니다? 솔루션은 최소한 MySQL에서 실행되어야합니다.

+0

'상태'를 원하십니까? 현재 쿼리가 '임의의'상태를 반환합니다! – Strawberry

+0

테이블에 해시가 두 번 이상 나타나는 모든 행에 대해 'status'를 9로 업데이트 하시겠습니까? –

+0

출력으로 정확히 원하는 것은 무엇입니까 ?? – Romesh

답변

0

중복되는 모든 해시를 찾아 다음 업데이트 쿼리에 대한 기준으로하는 것이 사용 : MySQL은은을 만들 수 있기 때문에

UPDATE foobar 
    SET status = 9 
    WHERE hash IN (SELECT hash 
        FROM foobar 
        GROUP BY hash 
        HAVING COUNT(*) > 1) 
+0

* "* FROM 절의 업데이트를 위해 'foobar'대상 테이블을 지정할 수 없습니다 *. – JJD

+0

죄송 합니다만, 나는 내가 수정 한 SQL에서 실수를했습니다. - 아! –

+0

SQL 문을 테스트 할 때 이미 ** 테이블 이름 **으로 대체되었습니다. 오류 메시지가 계속 표시됩니다. – JJD

1

당신은 그것은 MySQL의에서 작동

UPDATE foobar 
SET status = 9 
WHERE hash IN (
    SELECT hash FROM (
    SELECT 
     hash, 
     count(*) AS count 
    FROM foobar 
    GROUP BY hash 
) AS t 
    WHERE count > 1 
) 

을 사용할 수 있습니다 GROUP BY으로 선택을위한 임시 테이블.

0
UPDATE foobar t1 
    LEFT OUTER JOIN foobar t2 ON t1.id <> t2.id AND t1.hash = t2.hash 
WHERE t2.id IS NOT NULL 
SET t1.status = 9 
+0

다음과 같은 메시지가 나타납니다 : SQL 구문에 오류가 있습니다. "id"<> t2. "id"AND t1. "hash"= t2. "해시"WHERE t2. "id"IS "근처에 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. – JJD

+0

'''나는 여전히 다음을 받는다 : 당신은 SQL 문법에 오류가있다 : MySQL 서버 버전에 해당하는 매뉴얼을 점검하여 WHERE t2.id IS NOT NULL SET t1.status = 9 근처에서 올바른 구문을 사용하도록한다. – JJD

관련 문제