在 Postgres 中使用左外连接删除

2024-01-11

我正在将数据库从 MySQL 切换到 Postgres SQL。在 MySQL 中有效的选择查询在 Postgres 中也有效,但类似的删除查询则不然。

我有两个数据表,其中列出了某些备份文件的位置。现有数据 (ed) 和新数据 (nd)。此语法将挑选出现有数据,这些数据可能说明文件在现有数据表中的位置,将其与相同的文件名和路径进行匹配,但没有关于它在新数据中的位置的信息:

SELECT ed.id, ed.file_name, ed.cd_name, ed.path, nd.cd_name
FROM tv_episodes AS ed
LEFT OUTER JOIN data AS nd ON
ed.file_name = nd.file_name AND 
ed.path = nd.path
WHERE ed.cd_name = 'MediaLibraryDrive' AND nd.cd_name IS NULL;

我希望使用以下语法运行删除查询:

DELETE ed
FROM tv_episodes AS ed
LEFT OUTER JOIN data AS nd ON
ed.file_name = nd.file_name AND 
ed.path = nd.path
WHERE ed.cd_name = 'MediaLibraryDrive' AND nd.cd_name IS NULL;

我努力了DELETE ed and DELETE ed.*两者都渲染syntax error at or near "ed"。如果我尝试不使用别名,则会出现类似的错误ed。如果我尝试

DELETE FROM tv_episodes AS ed
LEFT  JOIN data AS nd.....

Postgres 发回syntax error at or near "LEFT".

我很困惑,找不到太多关于使用特定于 psql 的联接的删除查询的信息。


正如其他人所指出的,您不能直接在 DELETE 语句中 LEFT JOIN 。但是,您可以使用 USING 语句将主键自联接到目标表,然后针对该自联接表进行左联接。

请注意 WHERE 子句中 tv_episodes.id 上的自连接。这避免了上面提供的子查询路由。

DELETE FROM tv_episodes
USING tv_episodes AS ed
LEFT OUTER JOIN data AS nd ON
   ed.file_name = nd.file_name AND 
   ed.path = nd.path
WHERE
   tv_episodes.id = ed.id AND
   ed.cd_name = 'MediaLibraryDrive' AND nd.cd_name IS NULL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Postgres 中使用左外连接删除 的相关文章

  • Hadoop 上的 Sqoop:NoSuchMethodError:com.google.common.base.Stopwatch.createStarted() [重复]

    这个问题在这里已经有答案了 我在 Google Cloud DataProc 上的 hadoop 上运行 sqoop 以通过 Cloud SQL 代理访问 postgresql 但遇到 Java 依赖项错误 INFO First Cloud
  • Postgresql,选择一个“假”行

    在 Postgres 8 4 或更高版本中 获取默认填充的一行数据的最有效方法是什么没有实际创建行 例如 作为交易 伪代码 create table mytable id serial PRIMARY KEY NOT NULL parent
  • 查找具有唯一两列组合的所有行

    我有这张桌子messages sender id recipient id 1 2 1 3 1 3 2 1 3 1 2 3 我希望选择这样的行 Either sender id or receiver id current user id
  • 节点 PostgreSQL 客户端查询超时

    我正在使用节点包pg对于 postgres here https github com brianc node postgres npm i pg var pg require pg 我正在查询一个不属于我的大型集群 在某些条件下可能会失败
  • 使用临时表替换 WHERE IN 子句

    我让用户输入我需要在表中查询的值列表 该列表可能非常大 并且长度在编译时未知 而不是使用WHERE IN 我认为使用临时表并对其执行联接会更有效 我在另一个SO问题中读到了这个建议 目前找不到它 但会在找到时进行编辑 要点是这样的 CREA
  • Postgresql 和 jsonb - 将键/值插入多级数组

    非常类似于这个帖子 https stackoverflow com questions 58959678 postgresql add key to each objects of an jsonb array 但我很难适应他们的解决方案
  • 如何比较 Postgresql 中日期时间字段中的日期?

    在比较 postgresql Windows 中的版本 9 2 4 中的日期时 我遇到了一个奇怪的情况 我的表中有一列说update date与类型timestamp without timezone 客户可以仅使用日期搜索此字段 例如 2
  • Laravel 7.x eloquent addSelect 子查询来计数

    与 一起工作Laravel 7 x and Postgresql 我有一个User类和GroupPivot数据透视表 可以对多个模型进行分组 我想创建一个专栏User如果用户拥有针对该组的当前数据透视条目 则为 true 或 false 类
  • 列“users.id”必须出现在 GROUP BY 子句中或在聚合函数中使用

    关系 Item belongs to Product Product belongs to User 项目型号范围 scope search gt search term select products name users product
  • 在 SELECT 中将列值拆分为两列?

    我在 varchar 列中有一个字符串值 它是一个由两部分组成的字符串 在它到达数据库之前分割它不是一个选择 该列的值如下所示 one column part1 part2 part1 part2 所以我想要的是一个如下所示的结果集 col
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • 将 CSV 复制到 Amazon RDS 托管的 Postgresql 数据库

    我有一个使用 Amazon 的 RDS 服务托管的数据库 我正在尝试编写一个 Web 服务来更新所述数据库 我遇到的问题是它不允许我使用 COPY 命令 因为我收到此错误 错误 必须是超级用户才能复制到文件或从文件复制 我正在使用我为数据库
  • PostgreSQL 如何对字段上的 b 树索引执行 ORDER BY?

    我有一张桌子bsort CREATE TABLE bsort a int data text Here data可能不完整 换句话说 某些元组可能没有data value 然后我在表上建立一个 B 树索引 CREATE INDEX ON b
  • REASSIGN OWNED BY 为 1 个指定数据库

    我想使用以下命令更改一个特定数据库中所有表的所有者 REASSIGN OWNED BY postgres TO myuser 但它显示 ERROR cannot reassign ownership of objects owned by
  • Postgresql 中的 id 列位置重要吗?

    我正在测试删除主键列 id 的迁移 我想使用外键作为主键 当我运行并恢复迁移时 我看到表的状态是相同的 只是 id 列现在是最后一个 它会以任何方式改变我的数据库的行为吗 我是否应该费心去恢复迁移恢复代码中的列顺序 理论上一切都应该没问题
  • POSTGRESQL:如何在现有表上添加包含数据的新列

    我是 postgres 和 sql 脚本的新手 所以请耐心等待 我想要做的是在现有表上添加包含数据的现有列 现有表的示例 NAME AGE Adam 25 Tim 30 现在我想添加一个新列 ADDRESS 其中包含 Adam 和 Tim
  • 更新plpgsql中触发器函数中的多列

    给出以下架构 create table account type a id SERIAL UNIQUE PRIMARY KEY some column VARCHAR create table account type b id SERIA
  • 如何避免应用程序停止后 docker 容器停止

    有一个带有 Postgres 服务器的 docker 容器 postgres 停止或崩溃 无关紧要 我需要检查一些环境变量和一些文件的状态 默认情况下 容器在应用程序完成后停止 我知道有一个选项可以更改 dockerfile 中的默认行为
  • 如何创建postgres数据库模式的sql脚本?

    我想要 postgres 9 数据库模式的 sql 脚本 该脚本不在本地服务器上 我在 pgAdmin 的 sql 编辑器上尝试了 pg dump 命令 但它在那里不起作用 我不确定在哪里运行该命令 请帮助我做同样的事情 谢谢 pg dum
  • 将此 MySQL 查询转换为 PyGreSQL

    我正在开发一个 Ruby 应用程序 它使用 mysql 函数 XOR 和 BIT COUNT 不过 我现在需要在运行 PyGreSQL 的 Heroku 上运行该应用程序 我找不到任何可以帮助我的 PyGreSQL 文档 那么任何人都可以翻

随机推荐