mysqlmerge
时间: 2025-01-08 20:54:24 浏览: 51
### MySQL 数据合并操作
#### 使用 `UNION` 和 `UNION ALL`
在 MySQL 中,`UNION` 和 `UNION ALL` 是用于合并多个查询结果集的强大工具。`UNION` 操作符会合并并去除重复的结果行,而 `UNION ALL` 则保留所有的行,包括重复项。为了确保这两个操作的成功执行,所涉及的查询必须返回相同数量和兼容类型的列。
```sql
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
```
对于包含所有记录的情况:
```sql
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
```
当需要从不同表中提取相似结构的数据时,这两种方法都非常有用[^2]。
#### 基于特定字段进行分组与聚合
针对业务逻辑复杂度较高的情况,可以采用基于某些字段进行分组的方式来进行数据合并。例如,在处理大量数据查重合并的任务时,可以通过 `GROUP BY` 子句加上 `GROUP_CONCAT()` 函数来实现这一目标。这允许系统根据指定的标准对记录进行分类汇总,并将同一类别的 ID 或其他属性连接成一个字符串列表以便进一步处理。
```sql
SELECT GROUP_CONCAT(RS.alumniuser_id) AS groupAlumniIds
FROM (
SELECT au.*
FROM alumniuser au
WHERE au.isdelete = 0 AND au.organizationId = 1
GROUP BY au.alumniuser_id
) RS
GROUP BY RS.name
HAVING COUNT(*) > 1
LIMIT 100;
```
这段 SQL 查询展示了如何在一个拥有三十万条记录的大规模数据库环境中有效地识别并管理重复项[^3].
#### 处理一对多关系下的数据合并
面对一对多的关系模型,即一张主表关联着另一张或多张子表的情况下,也可以利用 `GROUP_CONCAT()` 来简化展示形式。下面的例子说明了怎样把客户联系人的名字及其电话号码按顾客编号组合起来显示在同一行内:
```sql
SELECT CUST_ID,
CUST_NAME,
CUST_ADDR,
GROUP_CONCAT(CONTACT_NAME SEPARATOR ', ') AS CONTACT_NAMES,
GROUP_CONCAT(DISTINCT CONTACT_PHONE ORDER BY CONTACT_PHONE DESC SEPARATOR '; ') AS PHONE_NUMBERS
FROM customer
JOIN contacts ON customer.CUST_ID = contacts.CUSTOMER_ID
GROUP BY CUST_ID, CUST_NAME, CUST_ADDR;
```
此代码片段不仅实现了基本的一对多数据合并功能,还加入了去重(`DISTINCT`)以及排序(`ORDER BY`)选项以增强输出质量[^5].
阅读全文
相关推荐
















