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,否则返回0MAX()函数取每组中的最大值——只要组内有一个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
相关产品推荐
相关产品推荐

