簡體   English   中英

更新表中字段值多次出現的行

[英]Update rows where field's value occurs more than once in table

可以說我有這樣的表:

a b
1 0
2 0
2 0
2 0 
3 0
4 0
5 0
6 0
6 0

我想更新場b1每一行與a的值表出現更多然后一次,所以我想是這樣的:

a b
1 0
2 1
2 1
2 1 
3 0
4 0
5 0
6 1
6 1

我只知道如何使用GROUP BYHAVING COUNT(*)>1選擇想要的行。 我不知道如何更新它們。

您可以使用update和self join一些東西來做到這一點

update table_name t1
join (
  select 
  a,count(*) as cnt
  from table_name group by a
  having cnt > 1
)t2
on t1.a = t2.a
set t1.b=1

這是一個測試案例

mysql> select * from test ;
+------+------+
| a    | b    |
+------+------+
|    1 |    0 |
|    2 |    0 |
|    2 |    0 |
|    2 |    0 |
|    3 |    0 |
|    4 |    0 |
|    5 |    0 |
|    6 |    0 |
|    6 |    0 |
+------+------+
9 rows in set (0.00 sec)

mysql> update test t1
    -> join (
    ->   select 
    ->   a,count(*) as cnt
    ->   from test group by a
    ->   having cnt > 1
    -> )t2
    -> on t1.a = t2.a
    -> set t1.b=1 ;
Query OK, 5 rows affected (0.04 sec)
Rows matched: 5  Changed: 5  Warnings: 0

mysql> select * from test ;
+------+------+
| a    | b    |
+------+------+
|    1 |    0 |
|    2 |    1 |
|    2 |    1 |
|    2 |    1 |
|    3 |    0 |
|    4 |    0 |
|    5 |    0 |
|    6 |    1 |
|    6 |    1 |
+------+------+
9 rows in set (0.00 sec)

你可以試試:

UPDATE mytable
SET b = 1
WHERE a IN (SELECT a 
            FROM (
               SELECT a 
               FROM mytable 
               GROUP BY a 
               HAVING COUNT(*) > 1) x);

注意使用看似冗余的子查詢:這是因為MySQL不允許您直接FROM子句中指定要更新的目標表mytable

在這里演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM