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

MySQL存储过程实现:筛选所有ID共有的source字段值

MySQL存储过程实现:找出所有ID共同拥有的Source值

核心逻辑

要筛选出所有ID共同拥有的source,关键验证规则是:每个source对应的唯一ID数量,等于表中所有唯一ID的总数——只有满足这个条件的source,才是所有ID都包含的。

基础版存储过程(固定表名)

假设你的表名为your_table,执行以下代码创建存储过程:

DELIMITER //

CREATE PROCEDURE GetCommonSources()
BEGIN
    -- 统计表中唯一ID的总数量
    DECLARE total_unique_ids INT;
    SELECT COUNT(DISTINCT id) INTO total_unique_ids FROM your_table;

    -- 筛选符合条件的source
    SELECT source
    FROM your_table
    GROUP BY source
    HAVING COUNT(DISTINCT id) = total_unique_ids;
END //

DELIMITER ;

使用方式

调用存储过程即可得到结果:

CALL GetCommonSources();

对应你给出的示例数据,会返回10和20,符合预期。

进阶版存储过程(支持动态表名)

如果需要适配不同表,可以创建带参数的存储过程,动态传入表名:

DELIMITER //

CREATE PROCEDURE GetCommonSources(IN target_table VARCHAR(64))
BEGIN
    -- 动态获取目标表的唯一ID总数
    SET @count_sql = CONCAT('SELECT COUNT(DISTINCT id) INTO @total_ids FROM ', target_table, ';');
    PREPARE count_stmt FROM @count_sql;
    EXECUTE count_stmt;
    DEALLOCATE PREPARE count_stmt;

    -- 动态筛选符合条件的source
    SET @query_sql = CONCAT(
        'SELECT source FROM ', target_table, 
        ' GROUP BY source HAVING COUNT(DISTINCT id) = @total_ids;'
    );
    PREPARE query_stmt FROM @query_sql;
    EXECUTE query_stmt;
    DEALLOCATE PREPARE query_stmt;
END //

DELIMITER ;

调用时传入实际表名即可:

CALL GetCommonSources('your_table');

注意事项

  • 替换代码中的your_table为你实际的表名
  • 如果表中存在NULL值的id或source,可根据需求添加WHERE id IS NOT NULL AND source IS NOT NULL过滤条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:45:55