在 netezza 中使用左连接进行更新

2024-04-02

我需要在更新期间对 netezza 中的两个表执行左连接。我怎样才能做到这一点?三个表的左连接可以工作,但两个表则不行。

UPDATE table_1
SET c2 = t2.c2
FROM
    table_1 t1
    LEFT JOIN table_2.t1
    ON t1.c1=t2.c1
    LEFT JOIN table_3 t3
    ON t2.c1=t3.c1

这有效但是

UPDATE table_1
SET c2 = t2.c2
FROM table_1 t1
    LEFT JOIN table_2.t1
    ON t1.c1=t2.c1

这就像尝试更新多列一样。

谢谢, 马尼拉蒂南。


在 Netezza 中执行带有联接的 UPDATE TABLE 时,重要的是要了解正在更新的表是always与 FROM 列表隐式 INNER JOIN。这种行为是记录在这里 http://www-01.ibm.com/support/knowledgecenter/SSULQD_7.2.0/com.ibm.nz.dbu.doc/r_dbuser_update.html.

您的代码实际上是将 table_1 连接到自身(一份没有别名的副本,一份以 t1 作为别名)。由于 table_1 的这两个版本之间没有联接条件,因此您将获得一个交叉联接,该联接提供了尝试更新 table_1 的多行。

使用 OUTER join 处理 UPDATE 的最佳方法是使用如下所示的子选择:

TESTDB.ADMIN(ADMIN)=> select * from table_1 order by c1;
 C1 | C2
----+----
  1 |  1
  2 |  2
  3 |  3
(3 rows)

TESTDB.ADMIN(ADMIN)=> select * from table_2 order by c1;
 C1 | C2
----+----
  1 | 10
  3 | 30
(2 rows)


TESTDB.ADMIN(ADMIN)=> UPDATE table_1 t1
SET t1.c2 = foo.c2
FROM (
      SELECT t1a.c1,
         t2.c2
      FROM table_1 t1a
         LEFT JOIN table_2 t2
         ON t1a.c1 = t2.c1
   )
   foo
WHERE t1.c1 = foo.c1;
UPDATE 3

TESTDB.ADMIN(ADMIN)=> select * from table_1 order by c1;
 C1 | C2
----+----
  1 | 10
  2 |
  3 | 30
(3 rows)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 netezza 中使用左连接进行更新 的相关文章

  • CriteriaQuery 中的条件左连接

    大家好 我正在尝试在 CriteriaQuery 中执行此操作 我搜索了很长时间 但找不到任何可以执行此操作的内容 有人可以帮助我吗 SELECT b name FROM Empl a LEFT OUTER JOIN Deplo b ON
  • 在 yii2 中对多个表使用连接

    我正在使用 yii2 我有 3 个表 帖子 粉丝 评论 我想使用 joinWith 来获取帖子及其评论以及帖子和评论的粉丝名称 在粉丝表中 我写的是这个查询 pre facebook posts find gt joinwith fans
  • 插入 MySQL 表或更新(如果存在)

    我想向数据库表添加一行 但如果存在具有相同唯一键的行 我想更新该行 例如 INSERT INTO table name ID NAME AGE VALUES 1 A 19 假设唯一的密钥是ID 并在我的Database 有一行ID 1 在这
  • 如何使用 NHibernate 插入或更新(或覆盖)记录?

    我需要将一行写入数据库 无论它是否已经存在 在使用 NHibernate 之前 这是通过存储过程完成的 该过程将尝试更新 如果没有行被修改 它将回退到插入 这很有效 因为应用程序并不关心记录是否存在 对于 NHibernate 我发现的解决
  • 如何使多个带有 OR 的 LEFT JOIN 完全使用复合索引? (第2部分)

    它用于计算用户进入 离开工作场所时如何扫描指纹的系统 我不知道它的英文怎么称呼 我需要确定用户是否早上迟到 以及用户是否提前下班 This tb scan表包含用户扫描指纹的日期和时间 CREATE TABLE tb scan scperc
  • 使用 LEFT JOIN 删除

    我想根据引用第一个表的另一个表中存在的数据从表中删除 但是 当我将其作为 SELECT stetement 运行时 我有有效的代码并显示要删除的值 但是当我将其更改为删除它给了我错误 我不明白它们为什么在那里 DELETE leadCust
  • 使用 Netezza 时差(以秒为单位)?

    我想获取 Netezza 中以分钟为单位的时差 以秒为单位 我有 2 列 Start 2014 06 01 07 45 04 and finish 2014 06 01 07 46 58 events 我尝试过使用DATEDIFF SECO
  • 如何使用 linq 扩展方法执行左外连接

    假设我有一个左外连接 from f in Foo join b in Bar on f Foo Id equals b Foo Id into g from result in g DefaultIfEmpty select new Foo
  • 如何在 LINQ 中对单个联接中的多个字段进行左联接

    我正在尝试对 LINQ 执行这个简单的 sql 查询 但它给了我错误 这是需要转换为 LINQ 的 SQL 查询 DECLARE groupID int SET groupID 2 SELECT FROM dbo Person p LEFT
  • 是否可以使用 data.table 索引连接分配习惯进行左连接并将 i 的不匹配行中的 NA 分配给 x ?

    昨天我给出了这样的答案 按五列匹配数据表以更改另一列中的值 https stackoverflow com questions 39176643 matching data tables by five columns to change
  • 使用 insertWithOnConflict 进行更新或插入

    我需要插入或更新 我找到了 SQLiteDatabase 的 insertWithOnConflict 方法 但我不知道它如何检查该条目是否已存在 理论上 我需要一个 Where 参数来检查某个 ID 是否存在 如果存在 它应该替换所有其他
  • 仅返回 LEFT JOIN 的最新结果[重复]

    这个问题在这里已经有答案了 我正在查询两个表 students2014 和notes2014 中的数据 以便返回学生列表以及每个学生的注释 为此 我使用以下 select 语句 SELECT FROM students2014 LEFT J
  • “左连接”与“左外连接”

    我知道实际上没有区别 但是 LEFT JOIN 是 ANSI 形式吗 或者是否有任何 RDBMS 会失败 LEFT JOIN 并需要 LEFT OUTER JOIN 我在这里询问 这样我就可以节省几次点击 填写表格等操作 以获得正确的 AN
  • MYSQL DATE 函数在 LEFT JOIN 中运行速度极慢

    添加行时 LEFT JOIN core records sales as sales ON DATE appointments date DATE sales date sold 根据我的查询 它将脚本的运行时间从大约 8 秒增加到 2 3
  • 在 R 中连接/匹配数据帧

    我有两个数据框 第一列有两列 x是水深 y是每个深度的温度 第二个也有两列 x也是水深 但与第一个表中的深度不同 第二栏z是盐度 我想通过以下方式连接两个表x 通过增加z到第一张桌子 我已经学会了如何使用 key 来连接表tidyr 但只有
  • LEFT JOIN 返回与 INNER JOIN 相同的结果

    我有一张桌子 磨砂膏 里面有 1600 个独特的物品 第二张桌子有100万以上 我运行 INNER JOIN 并获得 65 个匹配项 SELECT a BW Parent Number a Vendor Name b Parent Supp
  • 使用左连接获得不适当的输出

    我正在尝试获取变体列表 并且对于每个变体都获取所有subvariants list无论子变体属于何处 特别的Test say 100 这是示例数据 Id TestId SourceSubVariantId TargetSubVariantI
  • 从 LEFT OUTER JOIN 中删除重复项

    我的问题非常类似于限制 LEFT JOIN https stackoverflow com questions 757957 restricting a left join 有一个变体 假设我有一个表 SHOP 和另一个表 LOCATION
  • 在 SQLite 数据库的特定位置插入一行

    我正在 SQLite Manager 中创建数据库 并且错误地忘记提及一行 现在 我想在中间手动添加一行 在其下方 其余的自动增量键应自动增加 1 我希望我的问题很清楚 Thanks 您不应该关心键值 只需在末尾附加行即可 如果您确实需要这
  • Knex 中的表的别名

    我有一个 SQL 查询两次引用同一个表 并且我需要将该表别名为两个单独的别名 我不太清楚如何用 Knex 来编写它 有一个 单词 表和一个 用户 表 Words 表有两个外键 author id 和 winner id 引用 Users 表

随机推荐