【问题标题】:UPDATE a column based on multiple tables filter更新基于多个表过滤器的列
【发布时间】:2016-05-26 15:36:13
【问题描述】:

我有三个表,分别是 T1、T2、T3

我的更新查询是这样的:

UPDATE 
     T1 
SET 
     C1 =  'Y'
FROM 
     T2 
          INNER JOIN T1 ON T2.I = T1.I
          T2 INNER JOIN T3 ON T2.IN = T3.IN 
          WHERE T2.A = 'A'
          AND T2.B = 'B'
          AND T3.APP = 'LOW'

我尝试了多种方法来安排此问题,并查看了多种解决方案,但无法找出问题所在。

【问题讨论】:

  • 加入条件不需要和“AND”结合...在第3行你可以取出开头的“AND T2”,我相信。此外,第 4 行可能应该以“WHERE”而不是“AND”开头,因为您不再告诉它如何加入,而是提供特定的过滤器。您是否收到可以发布的特定错误消息?

标签: sql oracle sql-update


【解决方案1】:

坏消息是,Oracle 不支持 JOINUPDATE 查询中 - 即使语法是合理的(ANDINNER JOINS 之间???)。

好消息是您可以使用EXISTS

update t1
    set c1 = 'Y'
    where exists (select 1
                  from t2 join
                       t3
                       on t2.in = t3.in
                  where t2.i = t1.i and t2.A = 'A' and t2.B  = 'B' and
                        t3.APP = 'LOW'
                 );

【讨论】:

  • 谢谢,我应该知道“Oracle 不支持 JOIN in UPDATE”
  • 这里复制我的sql时出现了一些语法错误,现在已经编辑了。
猜你喜欢
  • 2021-01-12
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2020-01-30
  • 1970-01-01
  • 2022-07-30
  • 1970-01-01
相关资源
最近更新 更多