在 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 中使用左连接进行更新 的相关文章

  • MySQL:如果列包含多个ID,如何使用左连接获取数据?

    假设如下 表 信息 id target ids 1 2 2 3 4 1 4 2 3 1 表 目标 id value 1 dog 2 cat 3 tiger 4 lion Using 左连接 我期待这样的事情 id target ids va
  • 为什么 LEFT JOIN 与 WHERE 子句一起使用时不返回 NULL 记录? [复制]

    这个问题在这里已经有答案了 今天我尝试了一些更复杂的 MySQL 查询 我注意到 MySQL 的 LEFT JOIN 不适用于 WHERE 子句 我的意思是 它确实返回一些记录 但不会返回右侧为空的记录 例如 假设我们有表 albums a
  • SQL 多重外连接(将 t-sql 连接转换为 ANSI 格式)

    我有 3 个表 t1 t2 t3 我想要一个基于以下条件的结果集 t1 在 t2 t1 的所有行 上有外连接 t1 在 t3 t1 的所有行 上有外连接 t2 在 t3 t2 的所有行 上有外连接 如何在单个查询中使用这些外部 3 个联接
  • SQL INNER JOIN 与带有 WHERE 的 LEFT JOIN

    我试图更直观地掌握 SQL 连接 例如 学习如何将 RIGHT JOIN 重写为 LEFT JOIN 通过翻转表的顺序 帮助我更好地理解这两个连接的工作方式 然而 现在我想知道是否可以将 INNER JOIN 重写为带有 WHERE 条件的
  • 插入 MySQL 表或更新(如果存在)

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

    我需要将一行写入数据库 无论它是否已经存在 在使用 NHibernate 之前 这是通过存储过程完成的 该过程将尝试更新 如果没有行被修改 它将回退到插入 这很有效 因为应用程序并不关心记录是否存在 对于 NHibernate 我发现的解决
  • 使用 LEFT JOIN 删除

    我想根据引用第一个表的另一个表中存在的数据从表中删除 但是 当我将其作为 SELECT stetement 运行时 我有有效的代码并显示要删除的值 但是当我将其更改为删除它给了我错误 我不明白它们为什么在那里 DELETE leadCust
  • 尝试使用 LEFT OUTER JOIN 优化 MySQL 查询

    我有这个查询 它工作正常 只是需要很长时间 7 秒 jobs 表中有 40k 条记录 wq 表中有 700k 条记录 我尝试了 EXPLAIN 它说它查看作业表中的所有记录 并且不使用任何索引 我不知道如何告诉 MySQL 在查找 wq 表
  • MYSQL LEFT JOIN 与 GROUP BY

    我有 2 个查询 我需要加入它们 我需要将员工根据活动的工作时间与公司在规定时间段内同一活动的总工作时间进行比较 第一个查询是 SELECT u login a article p p article SUM p p going SUM p
  • MySQL 使用双左连接更新行,限制第一个匹配

    我有三张桌子 SQLFiddle 已创建表 http sqlfiddle com 9 a3dab 橙色文本是我需要通过比较 Products name 与 Filters filter 获得的内容 我发现子字符串匹配可以这样完成 on Pr
  • SQL:找出每个组每个 ID 的所有可能的年份组合

    我正在使用 Netezza SQL 我有以下关于学生 2010 2015 年 的数据集 my table 他们当前就读的学位专业 参加考试的日期以及考试结果 student id current major year exam result
  • 不相关实体的 HQL 左连接

    我有 2 个实体 A and B 它们是相关的 但我不想将关系映射添加到 bean 我们如何使用之间的左外连接A and B使用 HQL 或标准 有一些解决方法可以解决这个问题 按照指示使用本机 SQLhere https stackove
  • 在 netezza 中使用左连接进行更新

    我需要在更新期间对 netezza 中的两个表执行左连接 我怎样才能做到这一点 三个表的左连接可以工作 但两个表则不行 UPDATE table 1 SET c2 t2 c2 FROM table 1 t1 LEFT JOIN table
  • Count() 和左连接问题

    我在查询时遇到问题 该查询显示商店列表以及与其关联的产品数量 我已经玩左连接等有一段时间了 但没有成功 这些表具有以下结构 商店表包含列 id name 产品表包含列 id name status shop 查询如下 select s na
  • 如何将 Netezza 中的日期从时间戳格式转换为 yyyymmdd?

    如何将 Netezza 中的日期从时间戳格式转换为 yyyymmdd 使用以下查询转换为日期格式 select TO CHAR DATE 2009 12 23 23 45 58 YYYY MM DD or select TO CHAR TO
  • R dplyr left_join 错误

    所以我一直在尝试使用 left join 将新数据集的列获取到我的主数据集 称为员工 我已经仔细检查了矢量名称和我没有进行的清理 但似乎没有任何效果 这是我的代码 将不胜感激任何帮助 job codes lt read csv Quest
  • 如何包含时间跨度内多个分组的缺失数据?

    我在下面引用了查询 其中按教师 学习年月和过去 12 个月 包括当月 的房间对学习计数进行分组 我得到的结果是正确的 但是 我想在数据丢失时包含计数为零的行 我查看了其他几个相关的帖子 但无法获得所需的输出 Postgres 如何返回缺失数
  • 为什么Mysql在连接另一个表B时对表A使用全表扫描?

    我有一个表 A 和一个表 B 我正在从表 A 中选择信息 其中我只需要表 A 中的信息 其中表 B 联接表 A 我在联合列和 WHERE 子句上有索引 这是选择代码 SELECT FROM tableA INNER JOIN tableB
  • 多步 OLE DB 操作生成错误

    我正在从 Netezza 数据源运行一个简单的 FillSchema dss new DataSet ad new OleDbDataAdapter cmd ad SelectCommand new OleDbCommand SELECT
  • MySQL 可选的带有 MATCH 的 LEFT JOIN

    我有以下查询 它对 MySQL Innodb 数据库中同一搜索词的两个不同表中的两列执行全文搜索 SELECT Id MATCH tb1 comment tb2 comment AGAINST search term IN BOOLEAN

随机推荐