You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中关联两张表仅返回column1无重复的交集结果

实现方案

核心思路

先过滤掉Table2中同一column1对应多条记录的无效数据,再和Table1做内关联即可得到符合要求的交集结果。

可直接运行的SQL(兼容MySQL5.x及以上版本)

SELECT 
    t1.column2 AS `table1.column2`,
    t2.column2 AS `table2.column2`
FROM Table1 t1
-- 关联表2拿匹配的column2值
INNER JOIN Table2 t2 
    ON t1.column1 = t2.column1
-- 子查询过滤出表2中column1仅出现1次的有效值
INNER JOIN (
    SELECT column1
    FROM Table2
    GROUP BY column1
    HAVING COUNT(*) = 1
) valid_t2 
    ON t2.column1 = valid_t2.column1;

常见报错原因说明

你之前执行报错大概率是因为分组查询时直接选择了非分组字段(比如column2),不符合MySQL的ONLY_FULL_GROUP_BY模式约束。上面的写法中子查询仅返回过滤后的column1分组字段,完全兼容SQL标准,不会触发报错。

MySQL8.0+ 简化写法(窗口函数实现)

如果你的数据库版本支持窗口函数,可以用更简洁的CTE写法:

WITH t2_with_count AS (
    SELECT 
        column1,
        column2,
        -- 统计每个column1对应的记录数
        COUNT(*) OVER(PARTITION BY column1) AS record_cnt
    FROM Table2
)
SELECT 
    t1.column2 AS `table1.column2`,
    t2.column2 AS `table2.column2`
FROM Table1 t1
INNER JOIN t2_with_count t2 
    ON t1.column1 = t2.column1 
    AND t2.record_cnt = 1;

内容的提问来源于stack exchange,提问作者Jesse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:09:03