sql - PostgreSQL:如果不存在则插入,如果存在则返回ID

如果没有 IP 地址,以下查询将插入 IP 地址并返回 ID。

WITH variables AS (
  SELECT '1.1.1.2'::inet AS ip
)
INSERT INTO globals.ips (ip)
SELECT v.ip
FROM variables AS v
WHERE NOT EXISTS (
    SELECT i.global_ip_id 
    FROM globals.ips AS i 
    WHERE i.ip = v.ip
)
RETURNING global_ip_id

但是,当该值已存在于数据库中时,它不会返回 ID。

当值已经存在时,如何获取 ID?


我正在运行 PostgreSQL 12。

最佳答案

WITH variables AS (
  SELECT '1.1.1.2'::inet AS ip
), wt0 as (
INSERT INTO globals.ips (ip)
SELECT v.ip
FROM variables AS v
WHERE NOT EXISTS (
    SELECT i.global_ip_id 
    FROM globals.ips AS i 
    WHERE i.ip = v.ip
)
RETURNING global_ip_id
)
SELECT global_ip_id FROM wt0
UNION
SELECT id FROM globals.ips WHERE ip = 'SOMETHING';

https://stackoverflow.com/questions/63817389/

相关文章:

vim - Coc-Prettier 没有获取项目或家庭配置

amazon-web-services - 如何在本地运行和测试Cloud-init?

javascript - Chart JS Annotations Plugin - 你能创建一个工

javascript - 使用 Typescript 允许 React 组件上的任意数据-* 属性

asp.net-core - 客户端中的 IdentityServer 4 身份验证事件

javascript - Sonarqube 不显示安全热点

reactjs - 测试套装因 "SyntaxError: Unexpected token ' e

python - 使用 Enterprise Architect Python API 旋转标签

regex - 珀尔 : Edit the log file data

android-studio - Android Studio 不会生成签名的 aab