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

通过自我加入进行更新

壤驷向明
2023-03-14
问题内容

我想更新一个表以指示某些行是其他行的父表,因此我在表中添加了“父代”列。以下查询查找所有父母:

SELECT ca1.id, ca2.id 
FROM contactassociations ca1
JOIN contactassociations ca2 ON (ca1.contactid = ca2.contactid)
where ca1.entitytable = 'EMPLOYER' AND
ca2.entitytable = 'CLIENT';

但是当我尝试修改该语法以进行更新时,它不起作用:

UPDATE contactassociations ca1
SET    ca1.parentid = ca2.id
JOIN  contactassociations ca2 ON (ca1.contactid = ca2.contactid)
WHERE ca1.entitytable = 'EMPLOYER' AND ca2.entitytable = 'CLIENT';

我得到:

Error starting at line 6 in command:
UPDATE contactassociations ca1
SET    ca1.parentid = ca2.id
JOIN  contactassociations ca2 ON (ca1.contactid = ca2.contactid)
WHERE ca1.entitytable = 'EMPLOYER' AND ca2.entitytable = 'CLIENT'
Error at Command Line:7 Column:28
Error report:
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:

请注意,第7行第28列是“ SET”行的结尾。


问题答案:

Oracle不支持JOIN语句中的子句UPDATE

用这个:

MERGE
INTO    contactassociations ca1
USING   contactassociations ca2
ON      (
        ca1.contactid = ca2.contactid
        AND ca1.entitytable = 'EMPLOYER'
        AND  ca2.entitytable = 'CLIENT'
        )
WHEN MATCHED THEN
UPDATE
SET     parentid = ca2.id


 类似资料:
  • 问题内容: 如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表) 我正在尝试使用每个CTN的网络标签更新invoiceLine表。 最终结果将是: invoiceLine 我有以下表格: invoiceLine ctn network 1234 null 2345 null 3456 null terminal ctn network 123

  • 我想对MySQL表中的行求和,然后合并和更新。我正试图在一天内把所有的重复付款加起来。我将发布我现有的查询,但有一些限制。 示例: 预期结果: 我试过这个循环。 问题1.我一次只能更新一个专栏。 问题2。我以编程方式遍历行并更新值,因为如果没有重复的值,则行不会得到更新。我必须写另一个查询来更新。也可以删除现有查询。 问题3。它只适用于两次付款。 在laravel雄辩合并(和)多行和更新中是否有任

  • 问题内容: 在PHP中,我知道这比使用更加安全。但是,我找不到让SQL注入发生的情况的示例。 谁能举一些例子? 问题答案: 基本上,攻击的工作方式是通过在多字节字符的中间放置反斜杠,从而使反斜杠成为有效的多字节序列的一部分而失去其含义。 本文的一般警告: 对于任何以有效多字节字符结尾的字符编码,这种攻击都是可能的,因为 可以诱使他们创建有效的多字节字符,而不是转义后面的单引号。UTF-8不适合此描

  • 问题内容: 我有一张桌子 我想得到所有薪水高于A薪水的员工。我不想使用任何嵌套或子查询。在一次采访中有人问过,提示是使用自我加入。我真的不知道如何实现相同的目标。 问题答案: 使用自我加入

  • 问题内容: 我正在练习 自我连接 ,这是我编写查询时不了解的事情。 我有桌子 雇员表包含三个记录。 最后一列manager_id是指使Ahmed和Tove成为Ola经理的第一列ID。 如果我这样写查询 结果使艾哈迈德和托夫经理。然而 正确无误,有人可以解释吗? 问题答案: 自联接就像内部联接,其中同一表的两个或更多实例通过公共数据类型的列/字段联接在一起。这种连接(内部连接)根据连接条件给出公共行

  • 我有一张非常复杂的表格,是这样的:- 现在,我需要处理一个查询,该查询应该重复一个行,其中假设p2值对于该特定年份或从2009年、2010年或2011年中的任何年份都不可用,并将最后一列的值作为零放入其中。 所以现在我的数据库看起来应该像- 我试着使用临时表 但它不起作用。有谁能帮我。