gpt4 book ai didi

PostgreSQL 查找其他两个表中不存在的 ID

转载 作者:行者123 更新时间:2023-11-29 12:58:12 25 4
gpt4 key购买 nike

我想将 io 表中的 io_dl 字段从 1 更改为 0,前提是所有三个条件都成立

io 表 pkey -> io_id

  1. io 的 pkey 不在整个表 m 中,fkey 名为 m_id
  2. io 的 pkey 不包含在表 p 中,p_id 列是 csv 分隔的 ID 字符串 ex。 “1923,2309,210”
  3. io 表中 io_dl 字段的当前值设置为 1

我想不需要第 3 步,因为将 0 设置为 0 并不会真正搞砸任何事情,额外的检查可能会减慢查询速度?

这是我尝试过的方法,我得到了大量相同 io_id 的列表,我想我错误地使用了 join 或 union。

update io set io_dl = 0
where io_id in (
select i.io_id from io i
inner join (
select p_id as "io_id" from p
union
select regexp_split_to_table(m.m_id, ',')::integer
as id from m
) q
on i.io_id != q.io_id
where i.io_dl = 1
);

我相信几分钟后用一个更简单的查询做出了我自己的解决方案。

update io set io_dl = 0
where io_id in (
select i.io_id from io i
where i.io_id not in (
select p_id as "io_id" from p
union
select regexp_split_to_table(m.m_id, ',')::integer as "io_id" from m
) and i.io_dl = 1
);

最佳答案

使用except 获取不同的id:

update io
set io_dl = 0
where io_id in (
select io_id from io
except (
select p_id from p
union
select regexp_split_to_table(m_id, ',')::integer from m
)
) and io_dl = 1
returning *;

通过添加returning *,您可以控制更新了多少行。

关于PostgreSQL 查找其他两个表中不存在的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com