当前位置: 首页 > 面试题库 >

在Oracle上使用内部联接更新语句

尚楚
2023-03-14
问题内容

我有一个在MySQL中运行良好的查询,但是在Oracle上运行该查询时,出现以下错误:

SQL错误:ORA-00933:SQL命令未正确终止
00933。00000-“ SQL命令未正确终止”

查询是:

UPDATE table1
INNER JOIN table2 ON table1.value = table2.DESC
SET table1.value = table2.CODE
WHERE table1.UPDATETYPE='blah';

问题答案:

该语法在Oracle中无效。你可以这样做:

UPDATE table1 SET table1.value = (SELECT table2.CODE
                                  FROM table2 
                                  WHERE table1.value = table2.DESC)
WHERE table1.UPDATETYPE='blah'
AND EXISTS (SELECT table2.CODE
            FROM table2 
            WHERE table1.value = table2.DESC);

或者您 可以 执行以下操作:

UPDATE 
(SELECT table1.value as OLD, table2.CODE as NEW
 FROM table1
 INNER JOIN table2
 ON table1.value = table2.DESC
 WHERE table1.UPDATETYPE='blah'
) t
SET t.OLD = t.NEW

它取决于内联视图是否被Oracle更新( 要更新第二条语句取决于
此处

列出的一些规则 )。



 类似资料:
  • 问题内容: 有人可以验证内部连接对PL SQL中的UPDATE语句是否有效吗?例如 问题答案: 该synthax在Oracle SQL中不起作用。 在Oracle中,如果表是“键保留”的,则可以更新联接,即: 假设这是的主键,则此连接是可更新的,因为对于A的每一行,B 最多 只有一行,因此该更新是确定性的。 在您的情况下,由于更新后的值不依赖于另一个表,因此您可以使用具有EXIST条件的简单更新,

  • 问题内容: 我不知道是什么问题。使用MySQL 5.0尝试运行以下MYSQL更新语句时出现编译错误 所有字段名称都是正确的。有什么想法吗? 问题答案: 尝试这个: 更新: 既然您说查询产生了语法错误,所以我创建了一些可以对其进行测试的表,并确认查询中没有语法错误: 看到?没有语法错误。我针对MySQL 5.5.8进行了测试。

  • 问题内容: 我有这个查询: 在访问时执行此查询时,出现“语法错误”。你有看错吗? 谢谢 问题答案: 您可以使用a来对更新查询中的其他表求和。具有聚合的子查询将无法工作,因为它们不可更新。

  • 我试图根据连接表中的条件从用户表中选择一行,仅当连接表中存在一条记录时。如果记录不存在,我想返回该行。我只想在存在INNER JOIN记录且contact_blocked时不返回该行!=1。 通过下面的语句,我实现了当用户记录存在且联系人的值为0时我想要的结果。那一排被退回。当联系人被阻止时,不会返回任何内容。没关系。然而,另外,当内部连接记录还不存在时,我仍然希望与用户一起返回该行,因为它们尚未

  • 问题内容: 我正在使用 Oracle 10g数据库。 我有以下两个表: 使用ID_DEBTOR字段将这两个表连接在一起。 仅当HEADER不为null时,我才想使用关联的T_DEBTOR.HEADER更新T_ELEMENT.INSURER值。换句话说: 我尝试使用以下SQL查询: 该查询适用于与HEADER不为null的债务人链接的所有元素。但是,当T_DEBTOR.HEADER为null时,此查

  • 所以我有一个相关的子查询,我读到这不是最有效的方法。因此,我想将此查询转换为内部联接查询。 我试过这样的方法: 在对数据库“db”执行SQL查询时导致 我在这里的所有搜索结果都产生了大致相同的查询(与我尝试的类似)