PostgreSQL:忽略左外自连接更新

2023-12-01

我要更新专栏leaf_category with TRUE其中类别不是父类别。它作为一个选择语句工作:

 select 
     c1.id, c1.name, c1.slug, c1.level, c2.parent_id, c2.name, c2.slug, c2.level 
 from
     catalog_category c1 
 left outer join 
     catalog_category c2 on 
     (c1.id = c2.parent_id)
 where 
     c2.parent_id is null;

然而,相应的UPDATE将所有列设置为TRUE.

update catalog_category 
set leaf_category = True
from
    catalog_category c1 
left outer join 
    catalog_category c2 on 
    (c1.id = c2.parent_id)
 where 
     c2.parent_id is null;

Is an UPDATE这样可能吗?


你只是缺少一个连接WHERE clause:

UPDATE catalog_category c
SET    leaf_category = true
FROM   catalog_category c1 
LEFT   JOIN catalog_category c2 ON c1.id = c2.parent_id
WHERE  c.id = c1.id
AND    c2.parent_id IS NULL;

这种形式与NOT EXISTS做同样的事情可能会更快:

UPDATE catalog_category c
SET    leaf_category = true
WHERE  NOT EXISTS (
    SELECT FROM catalog_category c1
    WHERE  c1.parent_id = c.id
    );

该手册用于UPDATE.

Related:

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

PostgreSQL:忽略左外自连接更新 的相关文章

随机推荐

  • 从 jqGrid 的 gridComplete 事件期间创建的按钮调用函数?

    我试图在 gridComplete 事件期间创建的按钮的 onclick 事件中调用一个函数 加载正常 这是第一行中按钮的渲染 html 的样子
  • 匹配数组内的多个条件[重复]

    这个问题在这里已经有答案了 我有以下内容 offers user jon price 200 selected false user ted price 100 selected true 我正在尝试进行匹配 以获取用户被 ted 且选择为
  • 如何使用 DirectoryInfo.GetFiles 并让它在找到第一个匹配项后停止?

    需要搜索目录 子目录来查找文件 希望它在找到文件后停止 这是我缺少的 DirectoryInfo GetFiles 内置功能 还是应该使用其他功能 自行实现的递归搜索 Use DirectoryInfo EnumerateFiles 相反
  • Chrome ARC 中的 Google 地图

    我最近看到 ARC 现在支持一些 Google Play 服务 包括 Google 地图 使用 ARC Welder 时 我指定以下元数据 usePlayServices maps 根据文档here 我还必须在元数据中包含 crx key
  • 由于 403 错误,HPA 无法获取指标

    我在 hpa 中使用了以下指标 apiVersion autoscaling v2beta2 kind HorizontalPodAutoscaler metadata name app svc hpa namespace default
  • .Net TextBox 具有自动完成和自定义排序(非字母顺序)

    我正在搜索具有默认自动完成功能的文本框控件 但建议中的条目应像列表中的项目一样排序 例如 列出项目 ab ac aa bb 如果我在文本框中输入字母 a 建议的项目应按如下方式排序 ab ac aa 不是这样的 aa ab ac 有没有办法
  • Chrome扩展:onclick()事件没有触发alert()弹出窗口[重复]

    这个问题在这里已经有答案了 我无法触发alert 弹出窗口onclick event Code File 清单 json name Project version 1 0 0 manifest version 2 description P
  • 将 Java 库导入到 C# 中

    因此 我已用 C 将代码写入 zip 文件 但是当我导入库时 我有以下内容 Using java util Using java util zip Using java io 但是 这些都用红色下划线表示 并带有错误消息 The type
  • 检查来电号码是否存储在联系人列表中 android

    在我的 Android 应用程序中 当有来电时 我想显示我的自定义用户界面 并且我能够做到这一点 不 我想检查传入号码是否来自联系人 下面是我执行此操作的代码 但对于存储在我的联系人列表中的传入号码 它返回 null public Stri
  • 无法在 Haskell 中将 IO 字符串转换为 [Char]

    我编写了这个简单的函数 它采用两个文件名 字符串 并将第一个文件的内容写入第二个文件应用toUpper到每个角色 import Data Char ioFile f1 f2 do s lt readFile f1 sUp lt toUppe
  • Typescript 属性类型保护未知

    我正在尝试输入守卫未知类型 const foo obj unknown gt if typeof obj object obj if foo in obj typeof obj foo string return obj foo 但我越来越
  • SQL Server 查询性能

    我在繁忙的数据库上有一个存储过程 它经常在昂贵的查询列表中名列前茅 以某种方式 查询非常简单 它采用单个参数 ID int 即表的主键 并选择与该ID匹配的记录 主键是一个带有聚集索引的身份字段 所以我很困惑如何进一步优化它 查询如下 CR
  • 从 Google 电子表格单元格调用 Google App 脚本库

    在 Google 电子表格中尝试新的库功能 我已经包含了一个标识符为 Test 的库 并且该库实现了函数 foo 在电子表格单元格中输入 Test foo 会出现错误 未知函数名称 TEST FOO 如果我在电子表格中创建一个函数来包装库函
  • 分割汉字

    如何使用 JavaScript 将外来字符 例如中文 拆分为单独的数组值 split 似乎对英语很有效 但对中文则不太适用 请参阅下面两个字符串的结果 a 你好 b 你好吗 splitString text split RESULT hel
  • Iris 框架实现中指针接收器和值接收器的差异[重复]

    这个问题在这里已经有答案了 最近在研究Iris框架 我在实现Handler的时候遇到了一个问题 就像下面这样 package controller import github com kataras iris type Pages stru
  • AsyncTask 内的 Android AlertDialog

    我有一个带有复选框的列表视图 对于每个复选框 大约有 3 个 它都有一个特定的 AsyncTask 我从来都不知道用户选择了哪些复选框 所以我不能将 AlertDialog 放在异步任务的末尾 因为我永远不知道用户是否只选择了一个复选框 或
  • UIBarButtonItem 显示为蓝色方块,而不是我想要的图像(界面编辑器)

    So I have added a button to my nav bar in the interface editor however when I set the image I simply get a blue box The
  • @AfterThrowing 未按预期工作

    我想使用AOP来拦截服务层中抛出的所有运行时异常并作为域异常重新抛出 Aspect Component public class ExceptionWrapperInterceptor Pointcut within service pub
  • SwiftUI:如何以编程方式更改 rootview 控制器

    我试图在用户注销后将 rootview 控制器更改为不同的屏幕 if let window UIApplication shared windows first window rootViewController UIHostingCont
  • PostgreSQL:忽略左外自连接更新

    我要更新专栏leaf category with TRUE其中类别不是父类别 它作为一个选择语句工作 select c1 id c1 name c1 slug c1 level c2 parent id c2 name c2 slug c2