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

标签 sql postgresql

如果没有 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';

关于sql - PostgreSQL:如果不存在则插入,如果存在则返回ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63817389/

相关文章:

php - 如何在数据库中插入由 preg_match_all 获得的数组

sql - oracle中的RANK()和DENSE_RANK()函数有什么区别?

sql - 数据库字尾字符数限制?

sql - 是否可以在 postgresql 中为每个主键创建索引?

laravel - 如何从联接中的一组记录中获取列的总和?

json - PostgreSQL 选择到 JSON 数组

postgresql - pq 驱动程序 : prepared statement does not exist

sql - 在 Oracle (PL/SQL) 中执行动态 SQL 并确保安全性

sql - INSERT RETURNING 是否保证返回行的顺序

linux - 无法从容器连接到我的 docker 主机 postgresql 数据库