2013-08-28 3 views
0

MySQL 쿼리 작성에 도움이 필요합니다. 나는 다음과 같은 데이터베이스 테이블을 가지고 : 내가 뭘하려는 것은 갱신 in_group_id = 0 인 sku의 마지막에 A을 추가 할 수 모든 행이특정 고유하지 않은 값을 가진 레코드를 선택하는 MySQL 쿼리 업데이트

+----------------+-----------+-------------+------------+-------------------+---------+-------------+---------------+--------+ 
| option_type_id | option_id | sku   | sort_order | customoptions_qty | default | in_group_id | dependent_ids | weight | 
+----------------+-----------+-------------+------------+-------------------+---------+-------------+---------------+--------+ 
|   552 |  137 | 13071727 |  1000 | 0     |  0 |   0 |    | 0.0000 | 
|   553 |  137 | 13071727B |  1000 | 0     |  0 |   1 |    | 0.0000 | 
|   554 |  137 | 13071727C |  1000 | 1     |  0 |   2 |    | 0.0000 | 
|   555 |  137 | 13071727D |  1000 | 1     |  0 |   3 |    | 0.0000 | 
|   556 |  138 | 13085350-1 |  1000 | 0     |  0 |   0 |    | 0.0000 | 
|   557 |  138 | 13085350-1D |  1000 | 2     |  0 |   1 |    | 0.0000 | 
|   558 |  138 | 13085350-1C |  1000 | 3     |  0 |   2 |    | 0.0000 | 
|   559 |  138 | 13085350-1B |  1000 | 2     |  0 |   3 |    | 0.0000 | 
|   560 |  139 | 13069547M |  1000 | 20    |  0 |   0 |    | 0.0000 | 
|   561 |  140 | 13084477-2 |  950 | 2     |  0 |   0 |    | 0.0000 | 
|   562 |  140 | 13084477-2B |  951 | 2     |  0 |   1 |    | 0.0000 | 
|   563 |  140 | 13084477-2C |  952 | 3     |  0 |   2 |    | 0.0000 | 
|   564 |  140 | 13084477-2D |  953 | 0     |  0 |   3 |    | 0.0000 | 
|   565 |  140 | 13084477-2E |  954 | 2     |  0 |   4 |    | 0.0000 | 
|   566 |  141 | 13066533-1 |  1000 | 4     |  0 |   0 |    | 0.0000 | 
|   567 |  141 | 13066533-1B |  1000 | 5     |  0 |   1 |    | 0.0000 | 
|   568 |  141 | 13066533-1C |  1000 | 5     |  0 |   2 |    | 0.0000 | 
|   569 |  141 | 13066533-1D |  1000 | 0     |  0 |   3 |    | 0.0000 | 
|   570 |  142 | 13071674 |  1000 | 0     |  0 |   0 |    | 0.0000 | 
|   571 |  142 | 13071674D |  1000 | 1     |  0 |   1 |    | 0.0000 | 
|   572 |  142 | 13071674C |  1000 | 2     |  0 |   2 |    | 0.0000 | 
|   573 |  142 | 13071674B |  1000 | 0     |  0 |   3 |    | 0.0000 | 
|   574 |  142 | 13071674E |  1000 | 4     |  0 |   4 |    | 0.0000 | 
|   575 |  143 | 13071667 |  1000 | 0     |  0 |   0 |    | 0.0000 | 
|   576 |  143 | 13071667B |  1000 | 0     |  0 |   1 |    | 0.0000 | 
|   577 |  143 | 13071667C |  1000 | 0     |  0 |   2 |    | 0.0000 | 
|   578 |  143 | 13071667D |  1000 | 0     |  0 |   3 |    | 0.0000 | 
|   579 |  143 | 13071667E |  1000 | 0     |  0 |   4 |    | 0.0000 | 
|   580 |  144 | 13066295 |  1000 | 1     |  0 |   0 |    | 0.0000 | 
+----------------+-----------+-------------+------------+-------------------+---------+-------------+---------------+--------+ 

. 그러나 나는 단지 이 아니며에 고유 한 option_id 값이있는 행에서만이 작업을 수행하려고합니다.

예를 들어, option_id = 139 인 행이 option_id 값으로 행이라고 볼 수있다, 그래서 나는 가 업데이트되지이 행을 제외하고 싶습니다.

기본적으로 이것은 제품 옵션 목록이며 일부 제품에는 자체 SKU가있는 여러 옵션이 있습니다. 그러나 여러 옵션이있는 제품의 경우 첫 번째 옵션의 SKU 끝에 'A'가 누락되어 있으므로 추가하고 싶습니다. 하지만 단 하나의 옵션 만 가진 제품에 'A'를 추가하고 싶지는 않습니다. 나는 이것이 의미가 있기를 바랍니다.

누군가가 MySQL 성명서에이를 달성 할 수 있다고 조언한다면, 좋을 것입니다!

답변

0

의 수를 가지고 만 option_ids로 제한하는 하위 쿼리를 사용할 수 있습니다

UPDATE Table1 
LEFT OUTER JOIN (SELECT * 
      FROM Table1 
     GROUP BY option_id 
     HAVING count(*) = 1) t1 ON t1.option_type_id = Table1.option_type_id 
SET table1.sku = concat(table1.sku,'A') 
WHERE table1.in_group_id = 0 AND t1.option_type_id is null 

참조 SQL 바이올린 : http://www.sqlfiddle.com/#!2/9d08e/1/0

0

당신은 당신이 원하는이 쿼리 할 것 1.

UPDATE YourTable T 
INNER JOIN 
     (SELECT option_id 
       ,COUNT(option_id) as opt_count 
     FROM YourTable T1 
     GROUP BY 
       option_id 
     ) SQ 
ON  SQ.option_id = T.option_id     
SET  T.sku = CONCAT(T.sku,'A') 
WHERE T.in_group_id = 0 
AND  SQ.opt_count = 1 
관련 문제