Postgres 从左连接更新

2024-02-10

我是 PostgreSQL 的新手,正在尝试转换来自 SQL Server 的查询。

我有一个用户表,其中包括 bUsrActive、bUsrAdmin 和 sUsrClientCode 列。如果不存在具有相同 sUsrClientCode(其中 bUsrAdmin = true 且 bUsrActive = true)的其他用户,我想更新用户并设置 bUsrActive = false。

在 SQL Server 中我有这个查询

UPDATE u SET u.bUsrActive = 0
FROM Users u
LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = 1 AND u2.bUsrActive = 1
WHERE u.bUsrAdmin = 0 AND u.bUsrActive = 1 AND u2.nkUsr IS NULL

我正在尝试将其转换为 postgres。我写了3种方法。

1)我的第一次尝试。显然不起作用。

UPDATE Users u
    SET bUsrActive = false
FROM Users u2
WHERE u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = true AND u2.bUsrActive = true
AND u.bUsrAdmin = false AND u.bUsrActive = true AND u2.nkUsr IS NULL;

2)我明白为什么它不起作用(它更新所有用户)。我只是不知道如何在 UPDATE ... SET 部分引用表 Users u 。

UPDATE Users
    SET bUsrActive = false
FROM Users u
LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = true AND u2.bUsrActive = true
WHERE u.bUsrAdmin = false AND u.bUsrActive = true AND u2.nkUsr IS NULL;

3)以下是有效的,但不使用连接。

UPDATE Users
    SET bUsrActive = false
WHERE  NOT EXISTS (
    SELECT 1
    FROM Users u
    WHERE u.sUsrClientCode = Users.sUsrClientCode AND u.bUsrAdmin = true AND u.bUsrActive = true
) AND Users.bUsrAdmin = false AND Users.bUsrActive = true;

我可能会选择最后一个解决方案。我只是想知道是否可以使用左连接来做我想做的事情。


以下是将此更新查询从 SQL 服务器形式转换为 PostgreSQL 的通用方法:

UPDATE Users
 SET bUsrActive = false
WHERE
 ctid IN (
   SELECT u.ctid FROM Users u
      LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = 1 AND u2.bUsrActive = 1
    WHERE u.bUsrAdmin = 0 AND u.bUsrActive = 1 AND u2.nkUsr IS NULL
)

ctid http://www.postgresql.org/docs/current/static/ddl-system-columns.html是一个伪列,指向行的唯一位置。您可以使用表的主键(如果有)。

问题中的查询 #2 没有达到您的预期,因为更新后的表Users从未连接到同一个表Users u在 FROM 子句中。正如在 FROM 子句中两次放置表名一样,它们不会隐式连接或绑定在一起,而是被视为两个独立的行集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres 从左连接更新 的相关文章

随机推荐

  • 在XMPP IOS框架(XMPPFramework)中启用BOSH服务以创建基于聊天的应用程序

    我已经实现了基于聊天的应用程序 我可以用它来做很多功能https github com robbiehanson XMPPFramework https github com robbiehanson XMPPFramework图书馆 这是
  • 从html dom元素获取图像源

    我正在使用查询图像getElementsByTagName img 并使用打印它image gt src 这是行不通的 我也尝试使用image gt nodeValue这不起作用 require simple html dom php do
  • python 相当于 R 的 qnorm、qf 和 qchi2

    我需要 python 中某些分布的分位数 在 r 中 可以使用 qf qnorm 和 qchi2 函数来计算这些值 python 中是否有这些 R 函数的等价物 我一直在寻找 scipy 但我没有找到任何东西 相当于Rpnorm 函数是 s
  • 如何在不禁用的情况下禁用用户触摸 UIbarbutton?

    我的工具栏中有一个 UiBarButton 项目 我需要停用用户触摸交互 UiBarButton 没有设置用户交互启用其财产 当我隐藏它时 没有适当的可见性 有人可以告诉我如何在不禁用 UIbarbutton 的情况下禁用它的用户触摸交互吗
  • 尝试在Python中制作JSON Schema验证器来设置默认值

    我正在使用稍微修改过的代码版本JSON 架构常见问题解答 http python jsonschema readthedocs io en latest faq why doesn t my schema that has a defaul
  • Datalog、CLIPS、Prolog

    和很多程序员一样 我在大学里学过 Prolog 但只学了很少的部分 我理解Prolog和Datalog密切相关 但是Datalog更简单 另外 我相信我读到 Datalog 不依赖于逻辑子句的顺序 但我不确定为什么这是优点 CLIPS 据说
  • 使用 VBA 在 PowerPoint 中设置对象的位置

    我使用以下 VBA 行来设置刚刚粘贴到 PowerPoint 中的 Excel 选区的大小 位置 Set Shp PPApp ActivePresentation Slides PPApp ActiveWindow Selection Sl
  • 返回空列表而不是 null

    我想更改当前函数以返回空 JSON 列表 当前它返回nil 这是我当前的代码 func s Service projectsGet c gin Context var projects models Project user getUser
  • 沿轴对张量进行火炬求和

    如何对张量的列求和 torch Size 10 100 gt torch Size 10 最简单和最好的解决方案是使用torch sum 对张量的所有元素求和 torch sum x gives back a scalar 对所有行 即每列
  • 使用 pyparsing 解析嵌套结构

    我正在尝试解析生物序列中位置的特定语法 职位可以采用以下形式 12 a simple position in the sequence 12 34 a complex position as a base 12 and offset 34
  • 递归 SQL 将 CSV 拆分为表行

    在解决了一个不同的问题后 我偶然发现了递归 CTE 从表面上看 这似乎是解决 将 csv 拆分为表行 问题的相当简单的方法 我把这个例子放在一起 DECLARE InputString varchar 255 a b c d e f g h
  • java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.ClassLoadingException

    我使用 spring junit 测试 但在所有测试中都收到此错误消息 因为我更新了 Hibernate Search Hibernate 和 Springframework 在 pom xml 中 我包含了来自 Hibernate 的 c
  • WPF 中某些情况下上下文菜单被剪切

    上下文菜单在不同的 NET Framework 中被截断 查看 ZIP 文件中的图像 有两张截图 一张来自 XP 另一张来自 Win7 我创建了一个简单的 Visual Studio 2010 解决方案来重现我的问题 http www me
  • 在 iOS 13 中连接到 NFCTagReaderSession NFCISO7816Tag 标签并发送命令

    我正在研究 iOS 13 中新提供的 NFCTagReaderSession 我突然连接了会话标签并发送 apdu 命令进行通信 当我调用 connect 属性时 在连接时 发出蜂鸣声 它看起来需要 15 秒才能连接 它会显示一条错误消息
  • Python嵌入

    我想要一个嵌入 Python 解释器和一个小脚本的大型二进制文件 我对整个静态链接 配置和制作以及 GCC 等完全陌生 请问 有人可以向我描述构建此类可执行文件的基本步骤吗 我使用的是 MacOS 10 6 我下载了 Python 3 3
  • Tensorflow 重塑张量

    我正在尝试使用tf nn sparse softmax cross entropy with logits我已遵循用户 Olivier Moindrot 此处 1 的回答 但出现尺寸错误 我正在构建一个分割网络 因此输入图像为 200x20
  • BLOB 如何存储在索引视图中?

    问题 假设我在包含以下内容的表上创建索引视图varbinary max 列 二进制内容是否会被物理复制到索引视图的 B 树中 或者原始字段是否会以某种方式 引用 而无需物理复制其内容 换句话说 如果我在包含 BLOB 的表上创建索引视图 是
  • 将日期时间转换为 24 小时格式

    我从服务器得到的时间就像Jul 27 2011 8 35 29 AM 我想将其转换为yyyy MM dd HH mm ss 我还希望转换后的时间采用 24 小时格式 任何人都可以解决这个问题 我想要得到的输出就像2011 07 27 08
  • 在 Mac OS X 上使用 libpng 编译 C 程序

    我有一个用 C 语言编写的使用 libpng 的小实用程序 在linux下 我只需安装libpng dev并执行 gcc myapp c usr lib libpng so o myapp 在 Mac OS X 中 我安装了 Xcode 工
  • Postgres 从左连接更新

    我是 PostgreSQL 的新手 正在尝试转换来自 SQL Server 的查询 我有一个用户表 其中包括 bUsrActive bUsrAdmin 和 sUsrClientCode 列 如果不存在具有相同 sUsrClientCode