为什么它与 ~~any() 的作用不同?

2023-12-08

首先让我向您展示我的表格:

INSERT INTO my_table(name, brand, source)
VALUES ('Abc', 'Abc', 'Orig'), 
('Auchan', 'Auchan', 'Orig'), 
('Auchan', 'Auchan', 'Added'),
('dj-auchan-djd', 'Auchan', 'Added'),
('Auchan', 'Other', 'Added'),
('Other', 'oj_auchan', 'Added'),
('Other', 'Other', 'Added');

我想要做的是删除源为“已添加”且品牌或名称类似于源为“原始”的品牌的数据。例如,我们将删除下一行:

('Auchan', 'Auchan', 'Added'), - simply name and brand is 'Auchan'
('dj-auchan-djd', 'Auchan', 'Added'), - brand ad name has 'Auchan'(but name lowercase)
('Auchan', 'Other', 'Added'), - name is 'Auchan'
('Other', 'oj_auchan', 'Added') - brand has 'Auchan' but lowercase.

那么当我们手动创建这个品牌时会是什么样子:

delete
    from my_table
    where lower(name) ~~ any
           ('{%auchan%,%abc%}') IS TRUE
       or lower(brand) ~~ any
          ('{%auchan%,%abc%}') IS TRUE
       and source = 'Added';

效果很好,我们删除了带有“Auchan”的所有行。 但是当我尝试聚合这些品牌的数组时:

delete
from my_table
where lower(name) ~~ any
      (select '{'||array_to_string(ARRAY_AGG(DISTINCT '%' || lower(brand) || '%'), ',')||'}'
      from my_table
      where source = 'Orig') IS TRUE
   or lower(brand) ~~ any
      (select '{' || array_to_string(ARRAY_AGG(DISTINCT '%' || lower(brand) || '%'), ',') || '}'
      from my_table
      where source = 'Orig') IS TRUE
   and source = 'Added';

不会删除任何数据。

我什至检查了它们是否相似,是的,这两个数组将相似......

有人可以帮忙(或者提供如何删除此事件的建议)吗?


问题在于子查询的结果被解释为字符串,而不是数组。这是因为这两种形式在语义上是不同的:

~~ ANY ('...')  -- will be interpreted as an array literal

and

~~ ANY (SELECT ...)  -- will compare with all query results in turn

所以你可以简单地写:

WHERE lower(name) ~~ ANY
      (SELECT DISTINCT '%' || lower(brand) || '%'
       FROM my_table
       WHERE source = 'Orig')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么它与 ~~any() 的作用不同? 的相关文章

随机推荐

  • 使用 Kubernetes 部署并通过 Ingress 连接后 SSE 损坏

    我有一个使用 EventStream 的 ReactJS 客户端和一个实现 SSE 的 golang 后端 当我将浏览器连接到在 localhost 上运行的后端时 以及当我的后端在带有端口转发的 k8s 上运行时 一切似乎都正常 一旦我使
  • 在 Java 中使用 XSOM 解析 XSD 架构。如何访问元素和复杂类型

    我在使用 Java 中的 XSOM 解析 XSD 文件时遇到了很多困难 我有两个 XSD 文件 一个定义日历 第二个定义全局类型 我希望能够读取日历文件并确定 日历有 3 个属性 有效的是一个名为 eYN 的 ENUM Cal 是一个字符串
  • 从 Java/ Android 线程返回值

    我的 android 类中有以下线程 如何从线程中获取 err 的值 public int method new Thread new Runnable int err Override public void run err device
  • 使用 @XmlPath 和 jaxb/MOXy 来映射复杂类型

    我有一个深层 XML 结构 其中有许多无意义的包装器 我将其映射到单个 Java 类 使用 XmlPath 映射简单的数据类型就像在公园散步 但是当涉及到实际需要自己的类的类型时 我不太确定如何做到这一点 特别是当这些类型也应该放入列表中时
  • PHP 的字母等效项 is_numeric

    我正在寻找一个与 is numeric 按字母顺序等效的函数 如果字符串中只有字母 则返回 true 否则返回 false PHP 中是否存在内置函数 你要ctype alpha
  • 我的代码中的未知修饰符[重复]

    这个问题在这里已经有答案了 输出错误 未知修饰符 p 你的字符串包含一团糟 这需要转义为 使用时 作为正则表达式分隔符 代替 作为正则表达式分隔符 使用不会出现在字符串中的内容 例如 例如 你must选择有保证的定界字符not出现在 Src
  • jQuery 停止 fadeTo 效果

    我想要的是一种鼠标轨迹效果 当你将鼠标悬停在 div 上或向下时 但是 如果您将鼠标悬停过快几次然后停止 效果就会自行重复 我该如何解决这个问题 我想我需要某种出队的东西 比如动画选项 但对于 fadeTo 功能 有任何想法吗 test m
  • 根据条件连接data.table中的列名[重复]

    这个问题在这里已经有答案了 这就是我的 data table 的样子 最右边的一列PASTE是我想要的专栏 library data table dt lt fread A B C PASTE TRUE FALSE TRUE A C TRU
  • DigitalMicrograph 脚本对象是否可以收到图像 ROI 变化的通知?

    DigitalMicrograph 脚本文档提到了各种类型的 Listener 对象 这些对象可用于向脚本对象通知各种类型的事件 特别是 ImageDisplay 对象对按键侦听器具有显式支持 以便当击键事件针对特定图像显示时可以通知脚本对
  • LC-3 组装两个数字相减

    我对这个问题有疑问 因为我是 LC 3 编程的新手 编写 LC 3 代码 将 R0 中的值减去 R1 中的值 并将结果放入 R5 中 即编写 R5 R0 R1 的汇编代码 假设R1 10 R0为12 根据你的问题 我们可以假设 12 和 1
  • 301重定向以仅删除主页上的查询字符串

    我不知道 htaccess重定向规则 如果用户输入http example com abc 123 or https example com who 123 or https example com xyz 123那么它应该重定向到http
  • C++ 中的前递增比后递增更快 - 正确吗?如果是,为什么呢? [复制]

    这个问题在这里已经有答案了 我听说 C 中的前增量 i 比后增量 i 快一点 真的吗 这又是什么原因呢 后增量通常涉及保留前一个值的副本并添加一些额外的代码 预增量只是完成它的工作并摆脱困境 我通常会预增量 除非语义会改变并且后增量实际上是
  • 现代 Fortran:从后代调用祖先过程

    我开始使用 Modern Fortran 的 OO 功能 并且已经熟悉其他语言的 OO 功能 在 Delphi Object Pascal 中 通常在其重写的后代过程中调用过程的祖先版本 甚至有一个语言语句 继承 允许这样做 我找不到等效的
  • 为什么 if [ !$(grep -q) ] 不起作用而 if grep -q 起作用?

    我无法让 grep 在 if 语句中正常工作 在下面的代码段中 if check 始终为 true 即未找到该单词 并且程序会打印 NOT FOUND 即使该单词已经在 memory 中 for i 0 i lt aspellwords i
  • IIS 6.0 服务器太忙 HTTP 503 Connection_Dropped DefaultAppPool

    我们有一个站点 运行在带有 2 台 64 位计算机的 Windows 2003 集群上 该网站需要能够应对超过 20 000 个并发用户 该站点所做的事情之一是允许下载 2MB 文件 缓存在内存中 我们的 CPU 和内存使用率较低 我们还有
  • C++ Boost 1.66 使用 Beast http 请求解析器解析字符串

    我没有在我的项目中使用beast http服务器 但我正在寻找一种解决方案来解析程序中std string形式的http请求 是否可以在此使用boost beast http parser hpp如果是的话 如果您在代码中给出一个示例 那就
  • 初始化后无法更新 OxyPlot 图表

    我在 XAML 中定义了一个 OxyPlot 图表 如下所示
  • Rails 4 + gmaps4rails 2.0.3 中未定义 Gmaps

    Rails 4 0 0 中未定义 Gmaps4rails 谷歌铁路地图 我正在关注这个教程 http rubydoc info gems gmaps4rails 2 0 4 frames 1 Gemfile gem gmaps4rails
  • 如何在 Angular 2 模板打字稿中显示 json 对象参数

    我正在尝试在 template 中显示 Object 在控制台中用户 email正在工作 但在模板中它不起作用 是否必须定义 Users 对象的类型 如何正确处理响应 在控制台中 数据显示为用户对象 我从中获取第一个对象作为数据 0 imp
  • 为什么它与 ~~any() 的作用不同?

    首先让我向您展示我的表格 INSERT INTO my table name brand source VALUES Abc Abc Orig Auchan Auchan Orig Auchan Auchan Added dj auchan