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

MySQL新手求助:基于现有表列条件创建新表的实现

解决MySQL中按ID判断存在特定值并生成结果列的问题

错误原因分析

你当前的SQL报错是因为嵌套子查询返回了detail和new_column两列,但外层SELECT语句中该位置仅能接收单个列的值,所以触发了"operand should contain 1 column"错误。另外你的CASE逻辑也与需求相反——需求是存在12时返回1,而你写的是遇到12返回0。

正确解法

以下提供两种MySQL中可行的实现方式:

方法1:分组聚合 + CASE语句

这是最直观的实现方式,通过GROUP BY按ID分组,用聚合函数MAX判断组内是否存在符合条件的行:

INSERT INTO new_table (ID, result)
SELECT 
    ID,
    MAX(CASE WHEN detail = 12 THEN 1 ELSE 0 END) AS result
FROM your_table  -- 替换成你的实际表名
GROUP BY ID;
  • GROUP BY ID将相同ID的所有行合并为一组
  • CASE语句对每行进行判断:如果detail=12则返回1,否则返回0
  • MAX()函数取每组中的最大值——只要组内有一个1(即存在detail=12的行),最终结果就是1,否则为0

方法2:EXISTS子查询 + DISTINCT

通过EXISTS子查询直接判断当前ID是否存在detail=12的记录,配合DISTINCT确保每个ID只出现一次:

INSERT INTO new_table (ID, result)
SELECT 
    DISTINCT ID,
    CASE 
        WHEN EXISTS (SELECT 1 FROM your_table t2 WHERE t2.ID = t1.ID AND t2.detail = 12)
        THEN 1 
        ELSE 0 
    END AS result
FROM your_table t1;
  • DISTINCT ID过滤掉重复的ID,保证每个ID只输出一行
  • EXISTS子查询会检查当前ID对应的行中是否存在detail=12的记录,存在则返回true,对应CASE结果为1,否则为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:06:04