咨询Hive中基于另一表更新指定列的简便实现方案
简便解决方案:用子查询直接更新
其实你这个需求很简单,因为你要给Table2的Date字段统一设置成Table1中ID='01'对应的Date值(也就是'05/01'),不需要复杂的表关联,用子查询或者直接赋值都能搞定,分两种场景:
场景1:已经知道目标日期值
如果你已经确认Table1里ID='01'的Date都是'05/01',直接执行更新语句就行,这是最快的:
UPDATE Table2 SET Date = '05/01';
场景2:动态获取目标日期(避免手动写死值)
如果想让语句更灵活,不用手动输入日期,直接从Table1中查询出目标值再更新,用子查询就可以:
MySQL 写法
UPDATE Table2 SET Date = (SELECT Date FROM Table1 WHERE ID = '01' LIMIT 1);
SQL Server 写法
UPDATE Table2 SET Date = (SELECT TOP 1 Date FROM Table1 WHERE ID = '01');
Oracle 写法
UPDATE Table2 SET Date = (SELECT Date FROM Table1 WHERE ID = '01' AND ROWNUM = 1);
为什么之前关联操作可能失败?
你提到尝试关联没成功,大概率是因为关联时没有限制返回单行结果——如果直接把Table2和Table1关联,Table1中ID='01'有两行数据,数据库会因为「无法确定用哪一行的Date值」而报错。而上面的子查询通过LIMIT 1/TOP 1/ROWNUM=1确保只返回一个值,就不会有这个问题。
另外补充:如果Table1中ID='01'的Date有不同的值,你需要先明确取哪个(比如最大的、最小的),把子查询改成SELECT MAX(Date) FROM Table1 WHERE ID='01'就行。
内容的提问来源于stack exchange,提问作者forsaken
相关产品推荐
相关产品推荐

