各位用户为了找寻关于mysql 开发技巧之JOIN 更新和数据查重/去重的资料费劲了很多周折。这里教程网为您整理了关于mysql 开发技巧之JOIN 更新和数据查重/去重的相关资料,仅供查阅,以下为您介绍关于mysql 开发技巧之JOIN 更新和数据查重/去重的详细内容
主要涉及:JOIN 、JOIN 更新、GROUP BY HAVING 数据查重/去重
1 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN(MySQL 不支持)、CROSS JOIN
这是在网上找到的非常好的一篇博文,图解 join 语句:
CODING HORROR-A Visual Explanation of SQL Joins
下图可以很清楚的明白,join 的数据选取范围
[][1] [1]: http://7xs09x.com1.z0.glb.clouddn.com/160725-imooc-mysql-development-skills-notes-001.png
2 更新使用过滤条件中包括本身的表
更新 t1 t2 表中 col_a 重复的字段
? 1 2 3 4 5 6 7 8 9UPDATE
t1
SET
col_a =
'hi'
WHERE
t1.col_a
IN
(
SELECT
b.col_a
FROM
t1 a
INNER
JOIN
t2 b
on
a.col_a = b.col_a
)
;
ERROR:1093
可转换为:
? 1 2 3 4 5 6 7UPDATE
t1 aa
JOIN
(
SELECT
b.col_a
FROM
t1 a
INNER
JOIN
t2 b
on
a.col_a = b.col_a
)bb
on
aa.col_a= bb.col_a
SET
col_a =
'hi'
;
3 查询重复数据、删除重复数据
利用 GROUP BY 和 HAVING 查询重复数据
? 1 2 3 4SELECT
col_a,
COUNT
(*)
FROM
t1
GROUP
BY
col_a
HAVING
COUNT
(*) > 1
;
删除重复数据,对于相同数据保留 ID 最大的
? 1 2 3 4 5 6 7 8DELETE
a
FROM
t1 a
JOIN
(
SELECT
col_a,
COUNT
(*),
MAX
(id)
AS
id
FROM
t1
GROUP
BY
col_a
HAVING
COUNT
(*) > 1
)b
ON
a.col_a = b.col_a
WHERE
a.id < b.id
;
感谢阅读此文,希望能帮助到大家,谢谢大家对本站的支持!