You need to enable JavaScript to run this app. SQL如何根据表1的Grade与Chem字段为表2对应元素列填充Y
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何根据表1的Grade与Chem字段为表2对应元素列填充Y

实现方案

方式1:关联更新(适用表2已预先创建、需要更新现有数据的场景)

你之前的写法核心问题是搞反了更新目标表,且缺少对应元素列的条件判断逻辑,正确写法如下:

MySQL语法

UPDATE Table2 t2
INNER JOIN Table1 t1 
  ON t2.Grade = t1.Grade
SET 
  t2.AL = CASE WHEN t1.Chem = 'AL' THEN 'Y' ELSE t2.AL END,
  t2.CR = CASE WHEN t1.Chem = 'CR' THEN 'Y' ELSE t2.CR END,
  t2.MO = CASE WHEN t1.Chem = 'MO' THEN 'Y' ELSE t2.MO END;

SQL Server语法

UPDATE t2
SET 
  t2.AL = CASE WHEN t1.Chem = 'AL' THEN 'Y' ELSE t2.AL END,
  t2.CR = CASE WHEN t1.Chem = 'CR' THEN 'Y' ELSE t2.CR END,
  t2.MO = CASE WHEN t1.Chem = 'MO' THEN 'Y' ELSE t2.MO END
FROM Table2 t2
INNER JOIN Table1 t1 
  ON t2.Grade = t1.Grade

逻辑说明:

  • 仅需要关联两张表的Grade字段即可,不需要额外关联条件
  • 每一列的赋值用CASE做判断:只有当Table1的Chem值匹配当前列对应的元素名时才赋值Y,其余情况保留列原有值,避免误覆盖

方式2:行转列直接生成表2(适用表2还未创建的场景)

如果不需要提前建表,可以直接通过聚合查询直接得到符合要求的结果,一步生成目标表:

-- 通用查询逻辑,执行后直接得到你给出的预期结果
SELECT 
  Grade,
  MAX(CASE WHEN Chem = 'AL' THEN 'Y' ELSE '' END) AS AL,
  MAX(CASE WHEN Chem = 'CR' THEN 'Y' ELSE '' END) AS CR,
  MAX(CASE WHEN Chem = 'MO' THEN 'Y' ELSE '' END) AS MO
FROM Table1
GROUP BY Grade

如果需要把结果持久化为表2,可根据数据库调整语法:

  • MySQL/Oracle:在查询前加CREATE TABLE Table2 AS 即可
  • SQL Server:在FROM前加INTO Table2即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:15:03