[英]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
我想更新場b
至1
每一行與a
的值表出現更多然后一次,所以我想是這樣的:
a b
1 0
2 1
2 1
2 1
3 0
4 0
5 0
6 1
6 1
我只知道如何使用GROUP BY
和HAVING 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.